C++的简单模幂,无溢出

Simple Modular Exponentiation in C++ without overflow?

本文关键字:溢出 简单 C++      更新时间:2023-10-16

我必须创建一个简单的模幂函数,该函数接受输入三个整数a,b和c,并执行任务:a^b %c而不会溢出。

它是

模幂。假设无符号abc并且a * (c - 1)不会溢出:

unsigned int r = 1;
for (unsigned int k = 0; k < b; k++)
    r = r * a % c;

(请注意,C 中没有幂运算符,^用于XOROR

)。

为此使用欧拉定理,它可以显着降低指数。

您需要一个帮助程序函数来查找 phi 函数(或者其中可能有一个包含它的库)。 然后,您所要做的就是

(a ^ b) % c => (a ^ (b % phi(c)) % c

这肯定会有助于减少溢出的机会。 此外,mod 具有以下属性:

a*b % c = (a % c)*b % c

这意味着如果你的指数会导致溢出,你可以减半指数,并在较小的值上执行 mod。 查看一些数论书籍,了解更多技巧,使这更容易!