C++ 使用GMP.h头文件时返回类型

C++ 使用GMP.h头文件时返回类型,c++,gmp,C++,Gmp,当我使用gmp.h头文件时。我需要一个函数,它接受类型为mpz_t的输入,并返回类型为mpz_t的输入。 我是gmp的初学者 下面是我的代码 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));

当我使用gmp.h头文件时。我需要一个函数,它接受类型为mpz_t的输入,并返回类型为mpz_t的输入。 我是gmp的初学者 下面是我的代码

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;   
}
mpz\u和最大值(mpz\u最大值)
{    
mpz_t sum;
mpz_init(总和);
mpz_init(结果);
对于(int i=0;i请尝试以下操作:

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;
}
mpz\u和最大值(mpz\u最大值)
{
mpz_t sum;
mpz_init(总和);
mpz_init(结果);
int-val=1;

对于(int i=0;i可以在中找到使用GMP的函数的约定。基本上,您必须遵循GMP本身的相同约定-函数必须具有无效返回类型,并且必须提供一个值,将结果作为参数放入其中

以下是给出的示例:

 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;
 }
void foo(mpz_t结果,常量mpz_t参数,无符号长n)
{
无符号长i;
mpz_mul_ui(结果,参数,n);
对于(i=1;i
什么是
mpz\u t
?它是数组的typedef吗?如果是,则不能返回
mpz\u t