c++ - 具有非常大指数的 GMP mpz_pow_ui

标签 c++ gmp exponent

我有非常大的指数,其中指数

e = 26959946667150639794667015087019630673637144422540572481103610249951 

(225 位)

但是,根据mpz_pow_ui模板如下:

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

我认为 e 不适合该函数,是否有另一种方法使用 GMP C++ 计算大指数?

最佳答案

不要。如果求幂的基值不是 -101 以外的任何值,您将耗尽主内存(您将超过完全可用的虚拟地址空间)。如果目标是进行模幂运算(结果可以适合内存,因为它减少了 mod 一些适合 RAM 的数字),那么您需要 mpz_powm (如果您正在编写“真正的”加密代码,则为 mpz_powm_sec_sec 变体可防御 key 恢复的定时攻击)。

GMP 只接受该函数的无符号整数的原因是因为在这种情况下任意精度指数只会导致撕裂。

关于c++ - 具有非常大指数的 GMP mpz_pow_ui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35846737/

相关文章:

c++ - 生成用户定义素数的相对素数?

c++ - TinyXml++ 教程中的错误

c++ - unique_ptr(std::nullptr_t) 和模板

php - 如何解决 Windows 中的 "Call to undefined function dbase_open() "错误

haskell - 使用 LLVM(来自 Haskell)的大数算术

java - 奇怪的指数错误

c++ - 将 Google perftools 指定为 g++ 以便在 R 中使用 C++

c++ - 一样的功能?使用 GMP(C++) 运行速度慢大约 10 倍

opengl - GLSL:整数指数的 pow 与乘法

java - 使用递归计算要打印的内容的数量