使用 mpz_class 等同于 pow (a,b) 的 C++ GMP

C++ GMP equivalent of pow (a,b) using mpz_class

我正在尝试计算 ab 次方,其中 ab 属于 mpz_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(), a.get_mpz_t(), b.get_mpz_t());

它给出了同样的错误。

因为b是3,一个很小的数字,我试过:

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

它给出了 no member named __gmpz_get_ui 错误。

GMP 中没有计算一个无限整数的另一次幂的函数。大概是因为任何此类计算都会溢出太大而无法放入固定大小整数的数字。

最接近您想要的是 mpz_pow_ui,它对无界整数进行固定大小整数的幂运算。