"""
https://www.lanqiao.cn/problems/1155/learning/?page=1&first_category_id=1&problem_id=1155
"""
"""
欧拉定理: 当gcd(a, p)=1, 有a**(f(p)) ≡ 1(mod p)
上述定义中, 若p为质数, 则有a**(p-1) ≡ 1(mod p)
即: 费马小定理是欧拉定理的特殊情况
1.当gcd(a, p)=1时:
a**b ≡ a**(b mod f(p)) (mod p)
2.当gcd(a, p)!=1时:
1.当b<f(p)时:
a**b ≡ a**b (mod p)
2.当b>=f(p)时:
a**b ≡ a**((b mod f(p)) + f(p)) (mod p)
当b较小时, 不用降幂, 当b超大时, 利用欧拉函数可以直接降幂
"""
n, m = map(int, input().split())
mod = 1000000007
phi = mod - 1 # 欧拉函数: 当mod为质数时, phi(mod)=mod-1
x = 1
ok = False
# 快速幂
def ksm(a, b, p):
# a ^ b % p
res = 1
while b:
# 当前位是否有1
if b & 1:
res = res * a % p
a = a * a % p
b >>= 1
return res
# 欧拉降幂
for i in range(1, m + 1):
x = x * i
# 满足x>=phi就欧拉定理来降幂
if x >= phi:
x = x % phi
ok = True
if ok:
x += phi
# 如何求n ** x % mod , x=m!, 对x进行欧拉降幂
print(ksm(n, x, mod))
蓝桥杯-乘积次幂
最新推荐文章于 2024-07-18 19:36:20 发布