如何解决使用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(),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
,它将无界整数提高为固定大小整数的幂。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。