在C程序中使用GMP整数函数的正确方法是什么?

时间:2016-10-31 12:56:14

标签: c arrays biginteger gmp

我试图用1000位数来计算Fibonacci数的索引。

int i = 0, cnt = 2;

mpz_t limit;
mpz_init (limit);
mpz_ui_pow_ui(limit,10UL,999UL);

mpz_t fib[3];

for (i = 0; i < 3; i++)
    mpz_init2(fib[i], 1024UL);

mpz_set_ui(fib[0],1UL);
mpz_set_ui(fib[2],1UL);                      

我认为将1分配给第1个和最后一个元素会有问题。我知道因为这些元素没有变化。但循环应该有效,直到cnt变为4782。

  

while循环中的条件仅满足2if .. <=03if .. >=0。< / p>

while(mpz_cmp(fib[i],limit)<=0) // should be <= only, not >=
    {
    i=(i+1)%3;
    cnt++;
    mpz_add(fib[i],fib[(i+1)%3],fib[(i+2)%3]);   
    }

for (i = 0; i < 3; i++)
    mpz_clear(fib[i]);

mpz_clear(limit);

printf("Fibonacci number with more than 1000 digits: %d\n",cnt);

请帮助在此找到逻辑错误(它正在完美编译)。

P.S。我不想使用内置的mpz_fib_ui。 Integer Functions

1 个答案:

答案 0 :(得分:1)

在for循环之后,i = 3,因此while循环的条件语句取决于fib [3]

添加i = 0;在while循环修复它之前,给我所需的输出:

超过1000位的斐波纳契数:4782