給定n組詢問,每組詢問給定三個整數a,b,p,其中pp是質數,請你輸出cba mod p的值。
輸入格式
第一行包含整數n。
接下來n行,每行包含一組a,b,p。
輸出格式
共n行,每行輸出乙個詢問的解。
資料範圍
1≤n≤20
1≤b≤a≤10^18
1≤p≤10^5
輸入樣例:
3
5 3 7
3 1 5
6 4 13
輸出樣例:
3
32
# 快速冪
def qmi(a, b, p):
res = 1
while b:
if b & 1:
res = res * a % p
a = a * a % p
b >>= 1
return res
# 逆元計算組合數
def c(a, b, p):
j = a
res = 1
for i in range(1, b+1):
res = j * res % p
res = res * qmi(i, p - 2, p) % p
j -= 1
return res
# 盧卡斯定理
def lucas(a, b, p):
if a < p and b < p: return c(a, b, p)
else: return c(a % p, b % p, p) * lucas(a // p, b // p, p) % p
n = int(input())
for _ in range(n):
a, b, p = map(int, input().split())
print(lucas(a, b, p))
盧卡斯 Lucas 定理 逆元 求組合數
參考文章 lucas定理是用來求 c n,m mod p,p為素數的值。lucas定理 我們令n sp q m tp r.q r p 那麼 在程式設計時你只要繼續對 呼叫lucas定理即可。可以遞迴的去完成這個過程,其中遞迴終點為t 0 時間o logp n p ll lucas ll a,ll b...
數論 組合數 盧卡斯定理
使用遞推式cab ca 1b c a 1b 1 c a b c b c cab c a 1b ca 1b 1 求解階乘 1e9 7 t 1 05 t 10 5 t 1051 b a 2000 1 leq b leq a leq 2000 1 b a 2000 include using namesp...
組合數取模(盧卡斯定理)
組合數取模 盧卡斯定理 模板 const int n 1e5 5 const int mod 10007 ll fac n 用於求取階乘取模 ll n void init ll quick pow ll a,ll b return ans ll c ll n,ll m ll lucas ll n,l...