我正在使用gmp.h头文件。我需要一个函数,它接受mpz_t类型的输入并返回mpz_t类型。 我是使用gmp.h的初学者 所以,这是我接近的代码的快照......
mpz_t sum_upto(mpz_t max)
{
mpz_t sum;
mpz_init(sum);
mpz_init(result);
for(int i=0;i<=max-1;i++)
mpz_add_ui(sum,sum,pow(2,i));
return sum;
}
但会显示错误:
答案 0 :(得分:8)
使用GMP的功能约定可以在manual中找到。基本上,您必须遵循GMP本身所遵循的相同约定 - 函数必须具有void返回类型,并且您必须提供将结果作为参数放入的值。
以下是给出的例子:
void foo (mpz_t result, const mpz_t param, unsigned long n)
{
unsigned long i;
mpz_mul_ui (result, param, n);
for (i = 1; i < n; i++)
mpz_add_ui (result, result, i*7);
}
int main (void)
{
mpz_t r, n;
mpz_init (r);
mpz_init_set_str (n, "123456", 0);
foo (r, n, 20L);
gmp_printf ("%Zd\n", r);
return 0;
}
答案 1 :(得分:0)
尝试以下方法:
mpz_t sum_upto(mpz_t max)
{
mpz_t sum;
mpz_init(sum);
mpz_init(result);
int val = 1;
for(int i=0;i<=max-1;i++) {
mpz_add_ui(sum,sum,val);
val *= 2; //compiler should make a shift operation out of it
}
return sum;
}
此外,您可以删除math.h
标题。