C#BigInteger.ModPow错误?

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类中的错误还是我做错了什么?

Oli*_*rth 8

这只是一个定义问题.来自MSDN上的C#:

模数运算返回的值的符号取决于被除数的符号:如果被除数为正,则模数运算返回正结果; 如果是负数,则模数运算返回负结果.具有BigInteger值的模运算的行为与具有其他整数类型的模运算相同.

并从JavaDocsmod:

该方法的不同之处remainder在于它总是返回非负数BigInteger.

有关详细信息,请参阅http://en.wikipedia.org/wiki/Modulo_operation#Remainder_calculation_for_the_modulo_operation.