我试图用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循环中的条件仅满足
2
次if
..<=0
或3
次if
..>=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
答案 0 :(得分:1)
在for循环之后,i = 3,因此while循环的条件语句取决于fib [3]
添加i = 0;在while循环修复它之前,给我所需的输出:
超过1000位的斐波纳契数:4782