用于计算非常非常大的正整数的幂函数的数字模

Digit wise modulo for calculating power function for very very large positive integers

本文关键字:非常 函数 数字 计算 用于 整数      更新时间:2023-10-16

嗨,我正在写一个代码来计算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都非常大,我应该将它们存储在数组中,并逐位取模。

是否有任何有效的方法来做到这一点或一些数论算法,我错过了?

Thanks in advance

这是一个相当有效的方法:

1)计算p1 = p模10^9 + 7

2)计算q1 = Q模10^9 + 6

3)那么p ^Q模10^9 + 7等于p1^q1模10^9 + 7。这个等式成立是因为费马的小定理。注意,p1和q1足够小,可以容纳32位整数,因此可以使用标准整数类型实现二进制指数运算(对于中间计算,64位整数类型就足够了,因为初始值适合32位)。