عاملي
في الرياضيات، المضروب أو العاملي لعدد صحيح طبيعي n، والذي يكتب n!، والذي يقرأ "عاملي n"، هو جذاء الأعداد الصحيحة الموجبة قطعا والأصغر أو تساوي n. و يكتب :
أمثلة :
- 1! = 1
- 2! = 1 x 2 = 2
- 3! = 1 x 2 x 3 = 6
- 10! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 = 3628800
و تعريف العاملي على شكل جذاء يترتب عنه كون 0! = 1 ذلك أن 0! جذاء مفرغ، وبمعنى آخر مقتصر على العنصر المحايد في عملية الضرب.
و يلعب العاملي دورا أساسيا في علم الإحتمالات والتراتيب بما أنه يوجد n! طريقة مختلفة لتوزيع n شيئا. و يظهر العاملي في عدة معادلات رياضية، مثل سيغة الثنائي لنيوتن وصيغة تايلور.
و تعطينا صيغة ستيرلينغ مقاربا لـ n! عندما تكون n كبيرة :
عاملي عدد غير صحيح
لكل عدد صحيح n، لدينا حيث Γ هي دالة أولير (دالة غاما) وضعها ليونارد أولير. وتمكننا دالة أولير من تعميم العاملي على مجموعة الأعداد المركّبة باستثناء الأعداد السالبة قطعا. وفي النهاية نجد :
البرمجة
يمكن حساب عاملي عدد ما باستعمال خوارزميات الاستقراء. فلنكتب باستعمال لغة Scheme، القريبة من لغة Lisp، برنامجا استقرائيا يعطينا عاملي عدد صحيح :
(define fact (lambda (x) (if (= x 0) 1 (* x (fact (- x 1))))))
و هذا البرنامج السابق غير مفيد في حالة الاعداد الكبيرة.
و بنفس الطريقة في Caml :
let rec fact n = match n with | 0 -> 1 | _ -> n * fact(n-1) ;;
و بطريقة أخرى:
let fact n = let rec aux n r = match n with | 0 -> r | _ -> aux (n-1) (n*r) in aux n 1 ;;
و في لغة سي:
int factorielle_recursive(int n)
{
if (n == 0)
return 1;
else
return n * factorielle_recursive(n-1);
}
و بطريقة أخرى:
int factorielle_iterative(int n)
{
int res;
for (res = 1; n > 1; n--)
res *= n;
return res;
}
و في لغة Python:
fact = lambda x : x>0 and x*fact(x-1) or 1
----------------------------------------------------
الاستعمال :
for i in range(10):
print "fact %d = %d" %(i, fact(i))
ويظهر على الشاشة :
fact 0 = 1
fact 1 = 1
fact 2 = 2
fact 3 = 6
fact 4 = 24
fact 5 = 120
fact 6 = 720
fact 7 = 5040
fact 8 = 40320
fact 9 = 362880
هذه الدوال (البرامج) لا تمكننا من حساب عملي أعداد أكبر من 12 إذا كانت الاعداد الصحيحة محدودة بـ 32 بت، لأن النتيجة تتعدى المساحة المتوفرة.