我需要能够为非常大的 a 和 b 值计算 (a^b) % c(它们分别在推动限制,当您尝试计算 a^b 时会导致溢出错误)。对于足够小的数字,使用恒等式 (a^b)%c = (a%c)^b%c 有效,但如果 c 太大,这并没有真正的帮助。我编写了一个循环来手动执行 mod 操作,一次一个:
private static long no_Overflow_Mod(ulong num_base, ulong num_exponent, ulong mod)
{
long answer = 1;
for (int x = 0; x < num_exponent; x++)
{
answer = (answer * num_base) % mod;
}
return answer;
}
但这需要很长时间。有没有任何简单快捷的方法来执行此操作,而无需实际使用 a 的 b AND 的幂而不使用耗时的循环?如果一切都失败了,我可以创建一个 bool 数组来表示一个巨大的数据类型,并弄清楚如何使用按位运算符来做到这一点,但必须有更好的方法。