[英]C++ GMP equivalent of pow (a,b) using mpz_class
我正在尝试计算a
的b
幂,其中a
和b
是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
给no member named __gmpz_get_ui
错误。
GMP 中没有将一个无界整数求另一个的幂的函数。 大概是因为任何此类计算都会溢出太大而无法放入固定大小整数的数字。
最接近您想要的是mpz_pow_ui
,它将无界整数提高到固定大小整数的幂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.