使用mpz_class

问题描述

我正在尝试将a计算为b的幂,其中abmpz_class类型的。 GMP手册上没有足够的样本和解释。这是我的评论:

#include <gmpxx.h>
#include <iostream>

int main(){
    mpz_class r;
    mpz_class a = 2;
    mpz_class b = 3;

    mpz_ui_pow_ui (r.get_mpz_t(),2,3);// Works
    // mpz_ui_pow_ui (r.get_mpz_t(),a.get_mpz_t(),b.get_mpz_t());
    /* Doesn't work. Gives
 invalid conversion from 'mpz_ptr' {aka '__mpz_struct*'} to 'long unsigned int' [-fpermissive] error. In the the official documentation,there a bunch of similar pow functions such as
mpz_powm(mpz_t rop,const mpz_t base,const mpz_t exp,const mpz_t mod) without any samples.
    */
    std::cout << r << '\n';
}

如何做到?

我尝试过:

mpz_pow_ui (r.get_mpz_t(),b.get_mpz_t());

它给出了相同的错误。

因为b是3,即很小的数字,所以我尝试过:

mpz_pow_ui (r.get_mpz_t(),b.mpz_get_ui());

却给了no member named __gmpz_get_ui错误。

解决方法

GMP中没有函数可以将一个无界整数提高为另一个幂。大概是因为任何此类计算都会溢出太大而无法容纳固定大小整数的数字。

最接近您想要的是mpz_pow_ui,它将无界整数提高为固定大小整数的幂。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...