組合數取模(盧卡斯定理)

2021-08-15 15:25:17 字數 791 閱讀 6342

組合數取模(盧卡斯定理)模板

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,ll m)

推倒過程

/*

*盧卡斯定理:組合數取模運算

*lucas定理是用來求 c(n,m) mod p,p為素數的值。(注意:p一定是素數)

*表示式:c(n,m)%p=c(n/p,m/p)*c(n%p,m%p)%p。

*遞迴方程:(c(n%p, m%p)*lucas(n/p, m/p))%p。(遞迴出口為m==0,return 1)

*機械人走方格遞推公式:h(n)=c(2n,n)/(n+1)

*/

題目鏈結51nod - 1120 

首先看我們可以用傳統dp列舉前10個數來找下規律

#include#includeusing namespace std;

int n,dp[1005][1005];

int main()

return ans;

}ll c(ll n,ll m)

ll lucas(ll n,ll m)

int main()

數論 組合數 盧卡斯定理

使用遞推式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...

盧卡斯 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...

演算法題 盧卡斯定理求組合數(Python)

給定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...