AcWing 1308. 方程的解
原题链接
中等
作者:
皓首不倦
,
2020-09-08 22:21:17
,
所有人可见
,
阅读 379
'''
利用快速幂求x^x mod 1000 的数值n
利用隔板法,最后答案就是组合数C(n-1, k-1)
(n-1个空隙中选出位置不同的k-1个)
'''
def pow_mod(a, k, p):
t = []
pow_val = 1 # 2的次幂数, 初始是2^0 = 1
a_pow = a % p # a^(2 ^ i)的数值, 初始是a^(2^0) = a
while pow_val <= k:
t.append(a_pow)
a_pow = (a_pow*a_pow) % p
pow_val <<= 1
ans = 1
for i in range(len(t)):
if k & 1:
ans = (ans * t[i]) % p
k >>= 1
return ans
import sys
sys.setrecursionlimit(999999)
from functools import lru_cache
@lru_cache(typed=False, maxsize=128000000)
def conbination_num(n, m):
if m == n:
return 1
if m == 0:
return 1
if m == 1:
return n
return conbination_num(n-1, m-1) + conbination_num(n-1, m)
k, x = map(int, input().split())
n = pow_mod(x, x, 1000)
print(conbination_num(n-1, k-1))