العثور على كل رقم في باسكال المثلث على الصف ال1500?
-
11-12-2019 - |
سؤال
أنا فقط سألت سؤالا آخر حول مثلث باسكال حول العثور على مجموع الصف 1500.أنا سعيدة للغاية أن الناس أجاب بسرعة, ولكن للأسف في وقت لاحق أدركت, أحتاج كل رقم فردي على الصف 1500.
هنا وجدت طريقة سهلة لحساب أي رقم على مثلث باسكال ولكن عندما أحاول استخدام الصيغة في التعليمات البرمجية الخاصة بي ، تعطل البرنامج في البداية.
#include"stdio.h"
int factorial(int);
int main()
{
int i=0;
for(i=0; i<1501; i++)
{
printf("%d \n" , (factorial(1500)/factorial(1500-i))/factorial(i) );
}
}
int factorial(int x)
{
if(x<2)
return 1;
else
{
return x*factorial(x-1);
}
}
المحلول
كنت في حاجة الى مكتبة بيغنتيجر للنتائج ، منذ
binom(1500,750) = 722462892448930217028116073228485295944376343040546523665632913653613596406381727723198055046187955623124069093412562720869577867557610868874271130828359513282184417776042792372322074253393127328396528996120053749558122610911178218582669317535346728464707661495135518682519172221470420360910320792434869988224466647627642393919250205687942318888922893189087379790541907686956429837978631252775258630376332505697937034877619012586751274240109457111424
يتجاوز حتى المعتاد double
المدى.
ولكن مع مثل هذا النوع المتاحة ، والعلاقة
binom(n,k+1) = binom(n,k)*(n-k)/(k+1)
يسمح بتنفيذ بسيط وفعال نسبيا:
bigint value = 1;
int numerator = 1500 + 1, denominator = 0;
for(; denominator <= 1500; --numerator, ++denominator, value = value*numerator/denominator)
{
output(value);
}
أين output
هو أي طريقة الإخراج توفر المكتبة.
ال value = value*numerator/denominator
يحتاج الجزء إلى تكييفه إذا كانت المكتبة لا تقدم حمولات زائدة لمضاعفة / تقسيم العناصر الكبيرة والعادية int
s.
نصائح أخرى
استخدم خوارزمية خطية لعملية Formal بدلا من ذلك، لعدم تكديس تجاوز من خلال Recursion: giveacodicetagpre.