LUCAS定理簡述

2022-02-28 02:36:31 字數 647 閱讀 2249

lucas定理解決的是n,m比較大而p是小於100000質數

簡而言之就是lucas(n,m)=c(n%p,m%p)*lucas(n/p,m/p)%p;

其中組合數c是用任意一種計算10五次方內取模的組合數計算

比如可以預處理階乘fac[i],然後直接c(n,m)=fac[n]*quickpow(fac[n-m]*fac[m],p-2)%p;

或者o(n)套公式直接算也可以

要注意n可能小於m,因為是取模後的結果,這個時候返回0【不然會re】

下面給的是預處理階乘的

#include#include#include#include#define ll long long int

using namespace std;

const int maxn=1000005,inf=2000000000;

int p;

ll fac[2*maxn],n,m;

void cal()

inline ll qpow(ll a,ll b)

return ans;

}inline ll c(ll n,ll m){

if(n>t;

while(t--){

cin>>n>>m>>p;

cal();

cout<

數學 Lucas定理

lucas定理解決的一類問題是c n,m p,其中n和m很大的情況 顯然如果n和m在1e7的範圍內,我們可以很輕鬆的預處理o p o 1 得到c n,m p 那麼n和m很大的時候就可以靠lucas定理了 lucas定理 c n,m p c n p,m p c n p m p p 這樣就可以把n,m很...

數論 lucas定理

網上證明很多,雖然沒看懂。主要解決大組合數取模的情況 費馬小定理求大組合數 a p 1 1 p 兩邊同除a a p 2 1 a p c n,m n m n m 所以c n,m f n qpow f m f n m mod 2 mod 預處理組合數f 先推公式,再lucas p很大的情況 1e9 7 ...

lucas定理證明

lucas 定理 證明 a b是非負整數,p是質數。ab寫成p進製 a a n a n 1 a 0 b b n b n 1 b 0 則組合數c a,b 與c a n b n c a n 1 b n 1 c a 0 b 0 mod p 相同 即 lucas n,m,p c n p,m p lucas ...