GNU GMP mpz_powm()没有mod

时间:2013-08-09 15:09:01

标签: math gnu gmp

GNU GMP提供了一个名为mpz_powm(rop, base, exp, mod)的函数,它允许我通过另一个非常大的整数值来驱动一个非常大的整数值。该函数还强制我通过第4个参数调整结果。这就是“m”在mpz_powm中所代表的含义。没有mod参数的原因可能是为了避免非常大的结果,这可能会填满你的整个记忆,如:2^(2^64)。我想知道是否有可能在没有指定mod参数的情况下使用该函数,只需冒风险即可达到内存限制。

2 个答案:

答案 0 :(得分:2)

您正在寻找mpz_pow_ui ()。如果您希望传递的参数不适合单个单词,那么结果无论如何都不适合内存(除了琐碎的情况):

void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP)

答案 1 :(得分:1)

如果您不想调整答案,则需要使用mpz_pow_ui。但是,因为用大mpz_t取幂会创建一个不适合内存的整数,所以指数必须是unsigned long int

所以只需转换你的指数,然后使用函数:

mpz_pow_ui (rop, base, mpz_get_ui(exp))

但是,如果您的指数大于ULONG_MAX(通常为2 ^ 32-1),则会出现溢出错误。