/// <summary> /// Calculates 'this'^power /// </summary> /// <param name="power"></param> public void Power(BigInt power) { if (power.IsZero() || power.sign) { Zero(); digitArray[0] = 1; return; } BigInt pow = new BigInt(power); BigInt temp = new BigInt(this); BigInt powTerm = new BigInt(this); pow.Decrement(); for (; !pow.IsZero(); pow.RSH(1)) { if ((pow.digitArray[0] & 1) == 1) { temp.Mul(powTerm); } powTerm.Square(); } Assign(temp); }
/// <summary> /// Multiplication of two BigInts /// </summary> /// <param name="n1"></param> /// <param name="n2"></param> /// <returns></returns> public static BigInt Mul(BigInt n1, BigInt n2) { if (n1.digitArray.Length != n2.digitArray.Length) MakeSafe(ref n1, ref n2); BigInt result = new BigInt(n1); result.Mul(n2); return result; }