White Wolf

حل لغز الفاكتوريال

Posted in برمجة و بيرل by regex2008 on اغسطس 30, 2011

السلام عليكم ///

من مجتمع لينكس ، نص السؤال :

حسنا اللغز الذي أضعه من مشروع أويلر Project Euler
اللغز يقول:

العدد 145 عدد ملفت للنظر حيث أن
1! + 4! + 5! = 1 + 24 + 120 = 145أي أن مجموع مضروبات (factorial) الأرقام المكونة ل 145 = 145**لمن لا يعرف ما هو Factorial فهو حاصل ضرب جميع الأرقام من أول 1 حتى ذلك الرقم الذي أدخلته
ويتم التعبير عنه ب “!” هكذا n! حيث n هو الرقم المدخلالسؤال: ما هو مجموع الأرقام التي يساوي كل منها مجموع factorials الأرقام المكونة له (في حدود 1000000)

ملحوظة:بما أن 1!=1 ،2!=2 ليسا مجموع لfactorials فلا تضمنهما في الحل
الحل :
use strict;

sub fact {
    my $input = shift;
    my $output;
    if ( $input > 1 ) {
        $output = $input * fact( $input - 1 );
    }
    else {
        $output = 1;
    }
    return $output;
}

my @results;
for my $number ( 3 .. 1000000 ) {
    my @digits = split( //, $number );
    my $sum = 0;
    foreach (@digits) {

        $sum += fact($_);

    }
    push( @results, $sum ) if ( $number == $sum );

}

print join( ' ', @results );

 

الناتج :
145 و 40585

ملاحظة لا يوجد معنى لجعل الحد الاعلى مليون لان الناتج لن يتغير و لكن وضعته كما هو مطلوب في سؤالك

—–

مع استخدام مكتبة مساعدة :

كود:
use Math::Combinatorics;
for $number(3..100000){ my $sum; $sum += factorial($_) for (@digits = split(//,$number)); print $sum.' ' if ($number == $sum);}


2 تعليقات

Subscribe to comments with RSS.

  1. يعقوب said, on سبتمبر 3, 2011 at 11:28 م

    اسمح لي ان اضع ردي هنا , بعد ان بحثت على ايميلك ولم أجده ولم اجد اي معلومات عن صاحب هذه المدونة , احب ان اقول فقط … انني سعيد جدا بالعثور بالصدفة على مدونتك الرائعة , مواضيع كثير و جميلة و مميزة تروق لي … اعتقد انني ساكون من زوارها الدائمين , واتمنى عليك فقط تحسين تصميم المدونة لانها رائعة بحق … ويسعدني التعرف عليك , يعقوب توفيق , إعلامي , من فلسطين

  2. عراقية said, on سبتمبر 13, 2011 at 11:16 م

    Great Article very nice


اترك رد

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / تغيير )

Twitter picture

You are commenting using your Twitter account. Log Out / تغيير )

Facebook photo

You are commenting using your Facebook account. Log Out / تغيير )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 25 other followers