組合數取餘

2021-10-20 16:22:30 字數 988 閱讀 4327

組合數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...