組合數的幾種求法

2021-07-16 07:43:13 字數 1464 閱讀 9339

cnm

%p

c_n^m\%p

cnm​%p

0 ≤m

≤n

≤1000

0\leq m\leq n\leq 1000

0≤m≤n≤

1000

,1 ≤p

≤1e9

1\leq p \leq 1e9

1≤p≤1e

9,直接求

void com(int n,int p)	

}}

0≤m

≤n≤1

e18

0\leq m\leq n\leq 1e18

0≤m≤n≤

1e18

,1 ≤p

≤1e6

1\leq p \leq 1e6

1≤p≤1e

6,用盧卡斯定理

ll f[n];  //n為組合數的底數 的範圍  

void init(int p)

ll pow_mod(ll a, ll x, int p)

else

} return ret;

} ll lucas(ll n, ll k, int p)

return ret;

}

0≤n

≤1e18

0\leq n\leq 1e18

0≤n≤1e

18,0 ≤m

≤1e6

0\leq m\leq 1e6

0≤m≤1e

6,1≤p≤

1e

91\leq p \leq 1e9

1≤p≤1e

9,用盧卡斯定理

ll quick_mod(ll a, ll b)  

b >>= 1;

a = a * a % p;

} return ans;

}

ll c(ll n, ll m)

return ans;

}

ll lucas(ll n, ll m)

對於底數固定的,遞推求所有組合數

c[0]=1;

for(int i=1;i<=n;++i)

c[i]=c[i-1]*(n-i+1)%mod*inv[i]%mod;

0≤m

≤n≤1

e6

0\leq m\leq n\leq 1e6

0≤m≤n≤

1e6,1≤p

≤1e5

1\leq p \leq 1e5

1≤p≤1e

5,p可能為合數。因為p為合數好多東西不能用,所以直接對結果的每個質因子取模,可以避免除法。

nefu628

組合數的求法總結

楊輝三角遞推c i,j c i 1,j c i 1,j 1 題目詳見noip2016d2t1 code for int i 2 i maxn i for int j 2 j c i j c i 1 j c i 1 j 1 k 乘法逆元 a b p a bp 2 p為素數 如果p為素數,那麼k的逆元就...

組合數 求組合數的幾種方法總結

求c n,m mod的方法總結 1.當n,m都很小的時候可以利用楊輝三角直接求。c n,m c n 1,m c n 1,m 1 2.利用乘法逆元。乘法逆元 a b mod a b mod 2 mod為素數。逆元可以利用擴充套件歐幾里德或尤拉函式求得 1 擴充套件歐幾里德 b x p y 1 有解,x...

Numpy 組合陣列的幾種方法

來自 python資料分析基礎教程 numpy 學習指南 第2版 下面將介紹組合陣列的幾種方法 0.建立兩個3 3的陣列 from numpy import a arange 9 reshape 3,3 print a b 2 a print b 得到結果 0 1 2 3 4 5 6 7 8 0 2...