【发布时间】:2010-11-02 13:04:05
【问题描述】:
我需要能够为非常大的 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 数组来表示一个巨大的数据类型,并弄清楚如何使用位运算符来做到这一点,但必须有更好的方法。
【问题讨论】:
-
听起来像是欧拉问题...如果是,您应该在问题中明确说明,而不是试图作弊...
-
了解 a、b 和 c 的范围可能对我们有所帮助。
-
这个布尔数组的想法是行不通的。 Bool 数组不是位向量,它们不是打包存储的。另外,您不必依赖直接的硬件数学运算。
-
我实际上根本没有试图解决这个问题,我需要这个算法来编写我正在编写的加密程序。
-
这是为了您自己的启迪,还是您打算真正依靠您的算法来保护您的客户免受作恶者的侵害?如果是前者,你去。如果是后者,我强烈建议您重新考虑。