العثور على كل رقم في باسكال المثلث على الصف ال1500?

StackOverflow https://stackoverflow.com//questions/12653264

  •  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 يحتاج الجزء إلى تكييفه إذا كانت المكتبة لا تقدم حمولات زائدة لمضاعفة / تقسيم العناصر الكبيرة والعادية ints.

نصائح أخرى

استخدم خوارزمية خطية لعملية Formal بدلا من ذلك، لعدم تكديس تجاوز من خلال Recursion: giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top