使用 mpz_class 等同于 pow (a,b) 的 C++ GMP
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
错误。
GMP 中没有计算一个无限整数的另一次幂的函数。大概是因为任何此类计算都会溢出太大而无法放入固定大小整数的数字。
最接近您想要的是 mpz_pow_ui
,它对无界整数进行固定大小整数的幂运算。
我正在尝试计算 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
错误。
GMP 中没有计算一个无限整数的另一次幂的函数。大概是因为任何此类计算都会溢出太大而无法放入固定大小整数的数字。
最接近您想要的是 mpz_pow_ui
,它对无界整数进行固定大小整数的幂运算。