gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:04:18 26 4
gpt4 key购买 nike

我正在尝试计算 1000 位斐波那契数列的索引。

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 分配给第一个和最后一个元素有问题。我知道这一点,因为这些元素没有改变。但循环应该一直有效,直到 cnt 变为 4782。

The condition in while loop is only satisfied 2 times if.. <=0 or 3 times if .. >=0.

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);

请帮忙找出其中的逻辑错误(编译完美)。

附注我不想使用内置的 mpz_fib_ui。 Integer Functions

最佳答案

for循环之后,i=3,所以while循环的条件语句依赖于fib[3]

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

1000位以上的斐波那契数列:4782

关于c - 在 C 程序中使用 GMP 整数函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40342637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com