我有非常大的指数,其中指数
e = 26959946667150639794667015087019630673637144422540572481103610249951
(225位)
但是,根据mpz_pow_ui模板如下:
void mpz_pow_ui (mpz_t ROP, mpz_t BASE, unsigned long int EXP)
我认为e不适合该函数,是否有另一种使用GMP C ++计算大指数的方法?
答案 0 :(得分:2)
别。如果被取幂的基值是-1
,0
或1
以外的其他值,则会破坏主内存(您将完全超出可用的虚拟地址空间)。如果目标是进行模幂运算(结果可以适合内存,因为它减少了mod适合RAM的数量),你需要mpz_powm
(或mpz_powm_sec
如果你正在编写“真正的”加密代码; _sec
变体可以防止密钥恢复的时间攻击。
GMP只接受该函数的无符号整数的原因是因为在这种情况下任意精度指数只会导致撕裂。