【发布时间】:2014-08-04 11:12:32
【问题描述】:
您好,我正在编写代码来计算 P^Q 的位置
P, Q are positive integers which can have number of digits upto 100000
我想要的结果是
result = (P^Q)modulo(10^9+7)
例子:
P = 34534985349875439875439875349875
Q = 93475349759384754395743975349573495
Answer = 735851262
我尝试过使用这个技巧:
(P^Q)modulo(10^9+7) = (P*P*...(Q times))modulo(10^9+7)
(P*P*...(Q times))modulo(10^9+7) = ((Pmodulo(10^9+7))*(Pmodulo(10^9+7))...(Q times))modulo(10^9+7)
由于 P 和 Q 都非常大,我应该将它们存储在一个数组中,并逐位取模。
是否有任何有效的方法可以做到这一点,或者我缺少一些数论算法?
提前致谢
【问题讨论】:
-
如果你决定存储在数组上,你可以使用 BCD 编码来节省内存。
-
@JoachimPileborg 谢谢。它看起来很有趣,但由于数字 (10^9) 是一个素数并且这个问题涉及一个素数模数,我有一种直觉,我忘记了一些数论定理可能会在这里有所帮助。我正在寻找一些数论技巧,因为这个问题更多的是关于数学技巧而不是编程范式。
-
那么也许你应该像math.stackexchange.com那样代替?
-
@JoachimPileborg 感谢您的指出。我没有意识到这一点。我已经在那里发布了这个问题。
标签: c++ algorithm math modulo number-theory