我需要计算r = g
k
mod p
,其中g
和k
都可能是大整数,我的意思是他们可以是64位整数。有什么办法吗?
答案 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上的算法和伪代码的详细信息。