如何找到大数的mod?

时间:2017-07-23 15:52:21

标签: python python-3.x

如何在Python中查找大型输入的(a^(b^c)) % (10^9 + 7)? 我的代码在几个测试用例后才会被终止。

我的代码:

numbers = list(map(int, input().split())) 
x = numbers[2] 
y = numbers[1] 
z = numbers[0] 
m = pow(10,9) + 7
a = pow(y,x) 
r = z % m 
for i in range (0,a): 
    r = r*z 
    r = r % m 
    print(r) 

1 个答案:

答案 0 :(得分:1)

你应该使用Fermat的Little Theorem和Pingala的算法来获得权力。 a ^ (p - 1)1因此,如果您将(b ^ c) % (10 ^ 9 + 6)变为1(在获取权力之后)并以计算数字为模数,则可以使用a^2k % M = ((a^k % M)^2) % M的二进制方法和a ^ (2k + 1) % M = ((a % M) * (a^k % M) ^ 2) % M

f a b c p = modPow a (modPow b c (p - 1)) p

modPow x n p
    | n == 0 = 1
    | even n =
        let val = x ^ (n `div` 2)
        in (val * val) `mod` p
    | otherwise = (x * modPow x (n-1) p) `mod` p