我必须创建一个简单的模幂运算函数,它接受输入三个整数a,b和c,并执行任务:a ^ b%c没有溢出。
答案 0 :(得分:1)
是Modular exponentiation。假设未签名的a
,b
,c
和a * (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。查看一些数论理论书籍,了解更多技巧,以便更轻松!