private static BigInteger ExpMod(BigInteger number, BigInteger exponent, BigInteger modulo) { if (exponent.Equals(BigInteger.Zero)) { return BigInteger.One; } BigInteger t = BigInteger.Pow(ExpMod(number, exponent / Two, modulo), 2).Mod(modulo); if (!exponent.IsEven) { t *= number; t = t.Mod(modulo); } return t; }