Mar*_*inS 1 c# biginteger inverse
我要实现
BigInteger.ModPow(1/BigInteger, 2,5);
Run Code Online (Sandbox Code Playgroud)
但1/BigInteger总是返回0,导致结果也是0如此.我试着BigDecimal为c#寻找一些课程,但我什么都没发现.即使没有,有什么方法可以算这个BigDecimal吗?
Cod*_*aos 11
1/a| a |> 1为0,因为BigIntegers使用整数除法,其中忽略除法的小数部分.我不确定你对此有何期待.
我假设您想要模数的a模乘法逆m,而不是分数.这个逆存在iff a并且m是共同素数,即gcd(a, m) = 1.
链接的维基百科页面列出了用于计算模乘法逆的两种标准算法:
扩展欧几里德算法,适用于任意模数
它速度快,但具有依赖于输入的运行时.
我手头没有C#代码,但是从维基百科移植伪代码应该是直截了当的.
使用欧拉定理:

这需要知道φ(m),即你需要知道m的素因子.当m它是素数时它是一个受欢迎的选择,因此当它变成时,φ(m)= m-1
.如果你需要恒定的运行时间,你知道φ(m),这就是你要走的路.
在C#中,这变成了 BigInteger.ModPow(a, phiOfM-1, m)