GNU GMP提供了一个名为的函数mpz_powm(rop, base, exp, mod)
,它允许我用另一个非常大的整数值来驱动一个非常大的整数值。该函数还强制我通过第 4 个参数调制结果。这就是“m”在mpz_powm
. 没有 mod 参数就没有函数的原因可能是为了避免可能会填满整个内存的非常大的结果,例如2^(2^64)
:我想知道是否有可能在不指定 mod 参数的情况下使用该功能,只需冒险达到内存限制。
问问题
4171 次
2 回答
3
您正在寻找mpz_pow_ui ()
. 如果您希望传递的参数不适合单个单词,那么结果无论如何都不会适合内存(琐碎的情况除外):
void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP)
于 2013-08-09T15:13:40.147 回答
1
如果您不想调整答案,则需要使用mpz_pow_ui
. 但是,因为用大取幂mpz_t
会创建一个不适合内存的整数,所以指数必须是unsigned long int
.
所以只需转换你的指数,然后使用函数:
mpz_pow_ui (rop, base, mpz_get_ui(exp))
但是,如果您的指数大于 ULONG_MAX(通常为 2^32-1),则会出现溢出错误。
于 2015-09-03T18:52:40.260 回答