如何在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)
答案 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