Microsoft.Scripting.Math.BigInteger.ModPow C# (CSharp) Method

ModPow() public method

public ModPow ( BigInteger power, BigInteger mod ) : BigInteger
power BigInteger
mod BigInteger
return BigInteger
    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;
    }

Same methods

BigInteger::ModPow ( int power, BigInteger mod ) : BigInteger

Usage Example

コード例 #1
0
ファイル: LongOps.cs プロジェクト: atczyc/ironruby
        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;
        }