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