感谢你们参与回答了帖子里面的问题,来接分吧!http://topic.csdn.net/u/20100504/00/8dac79e4-6b5c-472a-8765-a354f6dc2e28.html以上4位都是给出了优于现有答案的方法。

解决方案 »

  1.   

    原题:2、123456789的123456789次方 % 987654321 = ?
    解法:public static int Calc2(int a, int b, int n)
    {
    var d = (long)a;
    var r = 1;
    while (b > 0)
    {
    if ((b & 1) != 0)
    r = (int)((r * d) % n);
    d = (d * d) % n;
    b >>= 1;
    }
    return r;
    }
    Calc2(123456789, 123456789, 987654321);参考:Snowdust 反复平方法
    public static long ModularExponentiation(int a, int b, int n)
    {
        string str = Convert.ToString(b, 2);
        int[] arr = new int[str.Length];
        for (int  i = 0; i < arr.Length; i++)
        {
            arr[i] = Convert.ToInt32(str[arr.Length - 1 - i].ToString());
        }
        int c = 0;
        long  d = 1;
        for (int  i = arr.Length - 1; i >= 0; i--)
        {
            c *= 2;
            d = (d * d) % n;
            if (arr[i] == 1)
            {
                c++;
                d = (d * a) % n;
            }
        }
        return d;
    }