C#modPow负指数技巧

时间:2013-10-02 20:41:38

标签: c# biginteger modulo pow

我尝试使用using System.Numerics.BigInteger;并使用负指数表示modPow,我阅读有关Exception的文档,这就是我做了一些技巧的原因

//a^(-x) mod n == (a^(-1))^x mod n
BigInteger tmp = BigInteger.ModPow(BigInteger.Divide(BigInteger.One, a), 
                 secretKey, pCommon);
BigInteger resBigInteger = BigInteger.Multiply(b, tmp); 

但是tmp是0.我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

你的“伎俩”只会欺骗自己。除非BigInteger.Divide(BigInteger.One, a)为1,否则a几乎总是为零。无论如何,这不是如何计算模块化逆。您必须实现扩展欧几里德算法,或者,如果您具有pCommon的完全因子分解,则可以计算a Φ(pCommon) - 1 == a -1 mod pCommon,其中Φ(n)是euler totient function