【发布时间】:2012-06-30 07:48:53
【问题描述】:
我想编写计算 pow(a,b)%MOD 值的代码。我使用 C++ 编写代码。
但问题是 b 的值可能非常大。我知道 log(b) 时间复杂度方法。但是,b 的值可能不适合 C++ 的“long long”数据类型。例如 b 可以是第 1000000000 个斐波那契数。如此大的数字的精确计算本身是不可能的(在时间限制内)。
附: :
- pow(a,b) 表示 a*a*a*a*... b 次。
- X % MOD 表示 X 除以 MOD 所得的余数。
【问题讨论】:
-
只是为了澄清一下,在 C++ 中
^是 XOR 运算符,而不是指数运算符(您最终会得到一些非常不合适的结果,那里有第一手经验)。我相信你必须使用Math.exp(a,b) -
@nbrooks:虽然 C++ 使用
^表示 XOR 当然是正确的,但Math.exp(a, b)看起来不像 C++(根据名称,我希望它能够计算指数,而不是提高一个数字的幂)。 -
伙计们,当涉及到数字理论任务时,蛮力方法至少可以说不是解决问题的最佳方法。一点点数论 101,你就会知道经典的欧拉定理。我的答案有适当的链接。我相信 MOD 是一个适合 CPU 寄存器的常用整数,这使得该任务成为模运算中的简单练习。