public ModPow ( |
||
power | ||
mod | ||
Результат |
public BigInteger ModPow(BigInteger power, BigInteger mod) {
if (object.ReferenceEquals(power, null)) {
throw new ArgumentNullException("power");
}
if (object.ReferenceEquals(mod, null)) {
throw new ArgumentNullException("mod");
}
if (power < 0) {
throw new ArgumentOutOfRangeException(MathResources.NonNegativePower);
}
BigInteger factor = this;
BigInteger result = One % mod;
while (power != Zero) {
if (power.IsOdd()) {
result = result * factor;
result = result % mod;
}
if (power == One) break; // avoid costly factor.Square()
factor = factor.Square();
factor = factor % mod;
power >>= 1;
}
return result;
}
BigInteger::ModPow ( int power, |
public static object Power(BigInteger x, BigInteger y, BigInteger z) { if (y < BigInteger.Zero) { throw PythonOps.TypeError("power", y, "power must be >= 0"); } if (z == BigInteger.Zero) { throw PythonOps.ZeroDivisionError(); } BigInteger result = x.ModPow(y, z); // fix the sign for negative moduli or negative mantissas if ((z < BigInteger.Zero && result > BigInteger.Zero) || (z > BigInteger.Zero && result < BigInteger.Zero)) { result += z; } return result; }