GNU GMP提供了一个名为 mpz_powm(rop, base, exp, mod) 的函数,它允许我通过另一个非常大的整数值为一个非常大的整数值供电 . 该函数还强制我通过第4个参数调整结果 . 这就是"m"在_321752中代表的含义 . 没有一个没有mod参数的函数的原因可能是为了避免非常大的结果,这可能会填满整个内存,如: 2^(2^64) . 我想知道是否有可能使用该功能而不指定mod参数只需冒险达到你的内存限制 .
mpz_powm(rop, base, exp, mod)
2^(2^64)
如果你不想't want to modulate your answer, you'需要使用 mpz_pow_ui . 但是,因为使用大 mpz_t 进行取幂会创建一个不适合内存的整数,所以指数必须是 unsigned long int .
mpz_pow_ui
mpz_t
unsigned long int
所以只需转换你的指数,然后使用函数:
mpz_pow_ui (rop, base, mpz_get_ui(exp))
但是,如果指数大于ULONG_MAX(通常为2 ^ 32-1),则会出现溢出错误 .
您正在寻找 mpz_pow_ui () . 如果您希望传递的参数不适合单个单词,那么结果无论如何都不适合内存(除了普通的情况):
mpz_pow_ui ()
void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP)
2 回答
如果你不想't want to modulate your answer, you'需要使用
mpz_pow_ui
. 但是,因为使用大mpz_t
进行取幂会创建一个不适合内存的整数,所以指数必须是unsigned long int
.所以只需转换你的指数,然后使用函数:
mpz_pow_ui (rop, base, mpz_get_ui(exp))
但是,如果指数大于ULONG_MAX(通常为2 ^ 32-1),则会出现溢出错误 .
您正在寻找
mpz_pow_ui ()
. 如果您希望传递的参数不适合单个单词,那么结果无论如何都不适合内存(除了普通的情况):