该示例是7^5 mod 11 (=10)
可以分为(((5^2) mod11)^2 mod11)*7 mod11
。听起来可以理解。
我在C#中构建了一个方法,对于示例和其他一些可用的值,但是对于大多数计算结果以及其他数字(与Wolfram Alpha相比),我的代码是错误的。
public static int moduloForBigNumbers(int baseValue, int exponent, int modulo)
{
int result;
int newBase = baseValue;
while (exponent > 1)
{
newBase = (int)Math.Pow(newBase, 2) % modulo;
exponent = exponent - 2;
}
if (exponent == 1)
{
result = (newBase * baseValue) % modulo;
return result;
}
return newBase;
}
例如,当使用7、560、561时,我得到了错误的结果。我最初的猜测是,数字太大,所以我尝试了很长时间。我的第二个猜测是,%计算出了点问题,但我无法弄清楚。
感谢您的帮助。