C# 用大数值对大数值进行幂运算,然后对结果进行模式化

C# 用大数值对大数值进行幂运算,然后对结果进行模式化,c#,C#,我需要计算r=gkmod p,其中g和k都可以是大整数,我的意思是它们可以是64位整数。有办法吗 你可以看看这个方法。可以表示任意大的整数值 ModPow方法计算以下表达式: (基值^指数)模模量 MSDN中的示例: BigInteger number = 10; int exponent = 3; BigInteger modulus = 30; Console.WriteLine("({0}^{1}) Mod {2} = {3}", number, ex

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

你可以看看这个方法。可以表示任意大的整数值

ModPow方法计算以下表达式: (基值^指数)模模量

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

如果您不想使用该操作,而是想自己实现该操作,那么可以使用某些方法来有效地执行该操作

你可以看看这个方法。可以表示任意大的整数值

ModPow方法计算以下表达式: (基值^指数)模模量

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

如果您不想使用该操作,而是想自己实现该操作,那么可以使用某些方法来有效地执行该操作

如果您更喜欢使用整数,您还可以实现自己的
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;
    }
publicstaticintmodularpower(intbaseval、intexpval、intmodval)
{
int initialVal=1;
对于(int i=0;i

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

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

    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;
    }
publicstaticintmodularpower(intbaseval、intexpval、intmodval)
{
int initialVal=1;
对于(int i=0;i

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

减少
g mod p
k mod phi(p)
,然后使用类似平方和乘法的方法。减少
g mod p
k mod phi(p)
,然后使用类似平方和乘法的方法。