使用大数字为大数字供电然后模式化结果

时间:2015-02-15 15:27:08

标签: c#

我需要计算r = g k mod p,其中gk都可能是大整数,我的意思是他们可以是64位整数。有什么办法吗?

2 个答案:

答案 0 :(得分:4)

您可以查看BigInteger.ModPow方法。 BigInteger可以表示任意大的整数值。

  

ModPow方法计算以下表达式:   (baseValue ^ exponent)模数

来自MSDN的示例:

BigInteger number = 10;
int exponent = 3;
BigInteger modulus = 30;
Console.WriteLine("({0}^{1}) Mod {2} = {3}", 
                  number, exponent, modulus, 
                  BigInteger.ModPow(number, exponent, modulus));   
//Result: (10^3) Mod 30 = 10

如果你不想使用那个,而是自己实施这个操作,那么可以使用某些techniques来有效地进行操作。

答案 1 :(得分:1)

如果您希望保留整数,还可以实现自己的ModularPower方法:

    public static int ModularPower(int baseVal, int expVal, int modVal)
    {
        int initialVal = 1;
        for (int i = 0; i < expVal; ++i)
        {
            initialVal = (initialVal * baseVal) % modVal;
        }

        return initialVal;
    }

Wikipedia上的算法和伪代码的详细信息。