GMP mpz_pow_ui 具有非常大的指数
GMP mpz_pow_ui with very large exponent
我有非常大的指数,其中指数
e = 26959946667150639794667015087019630673637144422540572481103610249951
(225 位)
但是,根据mpz_pow_ui模板如下:
void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP)
我认为 e 不适合该函数,是否有另一种使用 GMP C++ 计算大指数的方法?
不要。如果被求幂的基值不是 -1
、0
或 1
,您将破坏主内存(您将完全超过可用虚拟地址 space ).如果目标是进行 mod 元求幂(结果 可以 适合内存,因为它减少了 mod 一些适合 RAM 的数字),你想要 mpz_powm
(或 mpz_powm_sec
,如果您正在编写 "real" 加密代码;_sec
变体可抵御用于密钥恢复的定时攻击。
GMP 只接受该函数的无符号整数的原因是,在这种情况下,任意精度指数只会导致撕裂。
我有非常大的指数,其中指数
e = 26959946667150639794667015087019630673637144422540572481103610249951
(225 位)
但是,根据mpz_pow_ui模板如下:
void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP)
我认为 e 不适合该函数,是否有另一种使用 GMP C++ 计算大指数的方法?
不要。如果被求幂的基值不是 -1
、0
或 1
,您将破坏主内存(您将完全超过可用虚拟地址 space ).如果目标是进行 mod 元求幂(结果 可以 适合内存,因为它减少了 mod 一些适合 RAM 的数字),你想要 mpz_powm
(或 mpz_powm_sec
,如果您正在编写 "real" 加密代码;_sec
变体可抵御用于密钥恢复的定时攻击。
GMP 只接受该函数的无符号整数的原因是,在这种情况下,任意精度指数只会导致撕裂。