C ++中的简单模块化指数没有溢出?

时间:2016-07-14 22:28:56

标签: c++

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

2 个答案:

答案 0 :(得分:1)

Modular exponentiation。假设未签名的abca * (c - 1)不会溢出:

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

(请注意,C中没有幂级运算符,^用于XOR(exclosive OR。)

答案 1 :(得分:0)

为此使用Euler theorem,它可以显着降低指数。

你需要一个辅助函数来找到phi函数(或者可能有一个库中有这个函数)。然后,你所要做的就是

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

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

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

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