计算一个数的模(数的次方很大)我想自己计算RSA算法。我需要计算一个数在某个幂的模数。问题在于该特定能量的数量可能会变得巨大。这就是我想要的:x=pow(n,p)%q我怎样才能有效地确定x?如果您使用的是.NET4,我建议您检查一下BigInteger,它甚至提供了一种ModPow方法来在一次操作中完成所有工作:)BigIntegern=...;大整数p=...;大整数q=...;BigIntegerx=BigInteger.ModPow(n,p,q);这称为powermod函数:functionmodular_pow(base,exponent,modulus)c:=1fore_prime=1toexponentc:=(c*base)modmodulusreturnc通过平方应用指数可以更有效:functionmodular_pow(base,exponent,modulus)result:=1whileexponent>0if(exponent&1)equals1:result=(result*base)modmodulusexponent:=exponent>>1base=(base*base)modmodulus返回结果查看此线程和本文,了解如何使数学函数本身更有效率。请参阅MSDN上的BigInteger.ModPow(Fx4+)。琐碎的...x=1for(i=0;i比这种朴素的迭代更有效的方法,如二进制求幂,但这确实超过了溢出问题,因为x受n*q的限制,尽管这里提供了所有答案都是正确的,但是我错误地使用了明显的平方和乘法算法,这是实现模幂运算的“经典”方法。如果您要编写自己的Modpow()版本:您只需要模幂q,因此您的计算不需要使用任何大于q^2的数字,请使用以下事实:如果a=b(modq)thena*p=b*p(modq)因此,在计算幂n^p时,在每次乘法之后,对工作变量执行运算(模q)。此外,如果q是素数,则可以使用费马小定理,该定理指出:a^(q-1)=1(modq)(当a不是q的倍数时)当p(大于)大于q,可用于缩短计算。以上就是C#学习教程:计算一个数的模(这个数的幂很大)。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
