大数模运算(C#)

时间:2018-10-11 15:35:56

标签: c#

如今,我们在课堂上了解到,较大的模运算可以分为多个较小的模运算。

该示例是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时,我得到了错误的结果。我最初的猜测是,数字太大,所以我尝试了很长时间。我的第二个猜测是,%计算出了点问题,但我无法弄清楚。

感谢您的帮助。

0 个答案:

没有答案