組合數c(n,m)%k的計算
遞推公式 c(n,m)=c(n-1,m)+c(n-1,m-1)
一邊計算一邊取餘
時間複雜度o(n2) 適用範圍m,n<1000,k為自然數
#include
using
namespace std;
int c[
1001][
1001];
intmain()
for(
int i=
1;i<=n;i++
)for
(int j=
1;j) c[i]
[j]=
(c[i-1]
[j]+c[i-1]
[j-1])
%k;printf
("%d"
,c[n]
[m])
;return0;
}
算術基本定理:任何乙個大於1的自然數 n,如果n不為質數,那麼n可以唯一分解成有限個質數的乘積
#include
using
namespace std;
int check[
1000001];
int pri[
100001];
int cnt,cou;
struct a
ans[
1000001];
void
euler
(int n)
for(
int j=
1;pri[j]
*i<=n;j++)}
}void
division
(int n,
int dir)
ans[i]
.pcnt+
=sum*dir;}}
intmain()
當k是素數時,還可以使用乘法逆元求或lucas定 組合數的計算以及組合數對p取餘後結果的計算
前奏 統計 n 中的所有質因子中pi的個數 普通方法 複雜度o nlogn 當n為10的18次方無法承受 複雜度o nlogn n為10的18次方無法承受 int cal int n,int p return ans 改進後的方法 複雜度只有o logn int cal int n,int p re...
組合數取模
複習了一下組合數取模,當然推薦檢視acdreamer的部落格啦,寫的確實好啦,自己把裡面的題目全a掉了。include include include include include include include using namespace std typedef long long ll l...
組合數取模
對於c n,m mod p。這裡的n,m,p p為素數 都很大的情況。就不能再用c n,m c n 1,m c n 1,m 1 的公式遞推了。這裡用到lusac定理 for non negative integers m and n and a prime p,the following congr...