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

What is the correct way of using GMP integer functions in C programs?

我正在尝试计算具有 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);

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

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

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

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

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