繁体   English   中英

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

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

我正在尝试计算ab幂,其中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(), 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_uino member named __gmpz_get_ui错误。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM