nef*_*rel 9 .net c# java biginteger
我正在使用.NET BigInteger类来执行一些数学运算.但是,ModPow方法给了我错误的结果.我把它与Java比较,我认为是正确的:
// C#
var a = new BigInteger(-1);
var b = new BigInteger(3);
var c = new BigInteger(5);
var x = BigInteger.ModPow(a, b, c); // (x = -1)
// Java
BigInteger a = new BigInteger("-1");
BigInteger b = new BigInteger("3");
BigInteger c = new BigInteger("5");
BigInteger x = a.modPow(b, c); // (x = 4)
Run Code Online (Sandbox Code Playgroud)
它是.NET类中的错误还是我做错了什么?
这只是一个定义问题.来自MSDN上的C#:
模数运算返回的值的符号取决于被除数的符号:如果被除数为正,则模数运算返回正结果; 如果是负数,则模数运算返回负结果.具有
BigInteger值的模运算的行为与具有其他整数类型的模运算相同.
并从JavaDocsmod:
该方法的不同之处
remainder在于它总是返回非负数BigInteger.
有关详细信息,请参阅http://en.wikipedia.org/wiki/Modulo_operation#Remainder_calculation_for_the_modulo_operation.