組合數對應著楊輝三角楊輝三角中第i行j個表示cj
−1i−
1 由組合數的定義cj
i=ci
−ji
根據二項式展開(x
+1)n
=∑ni
=0ci
nxi
x=1時∑ni
=0ci
n=2n
∑2|i,i≤
ncin
=∑2/
|n,i
≤nci
n=2
這個可以在楊輝三角上將每乙個點分解得出: 當2
|n,由於有對稱性,證明顯然 當2
/|n ,如圖
同樣,將楊輝三角上的點合併:
c 證明
:左式=
(a+b
+c)!
a!(b
+c)!
∗(b+
c)!b
!c!=
(a+b
+c)!
a!b!
c!=(
a+b)
!a!b
!∗(a
+b+c
)!(a
+b)!
c!=c
ca+b
+c∗c
aa+b
也可以用定義證明。
【51nod 1362】推箱子
大意:n*m的網格圖從格點(0,0)走到第n行的某個格仔停止,要求只能向下或向右,或到右下方的格仔
即(x,y)走到(x+1,y),(x,y+1),(x+1,y+1)
問方案數,對x取模 1≤
n≤800,1≤
m,x≤
2∗109
多組資料
input
1 2 10
3 3 100
output
9
96
n這麼小?!
列舉終點
再列舉斜著走i格,然後套上組合數:an
s=∑p
=0m∑
i=0m
in(p
,n)c
in+p
−i∗c
n−in
−i+p
−i發現
(n−i
)+(p
−i)+
i=n+
p−i=
∑p=0
m∑i=
0min
(p,n
)cin
∗cp−
in+p
−i=∑
i=0m
in(n
,m)c
in∑p
=imc
nn+p
−i=∑
i=0m
in(n
,m)c
in∑p
′=0m
−icn
n+p′
p′代替
p−i,
發現可以
套另乙個
公式=∑
i=0m
in(n
,m)c
ni∗c
n+1n
+m−i
+1%x怎麼辦?
x不是質數!!
x不是質數就不能用費馬小定理求逆元。
尤拉定理求逆元呢?
那要互質啊。
誒n<=800!
那我們直接強行分解質因數就好了!!
然而質因數個數?
想到由於x的質因數很小,所以,與x互質的分母直接用尤拉定理求逆元。其他的強算即可。
記得要用快速乘,不然unsignedll都會爆。
code:
#include
#include
#define ll long long
using namespace std;
int pr[100100],s[100100],d[100100],n,m,t,ola,c[1000][1000];
ll x,ans,ans,div;
bool bz[100100];
void swap(int &a,int &b)
ll qmul(ll a,ll b)
ll qpow(ll a,int b)
void inc(int
x)ans=qmul(ans,(ll)x);
}void dec(int
x)div=qmul(div,(ll)x);
}int main()
}while(~scanf("%d
%d%lld",&n,&m,&x))
if(tmp==1)break;
if(pr[i]*pr[i]>tmp)
}for(int i=0;i<=n && i<=m;i++)printf("%lld\n",ans);}}
一些組合數學
f x x 1 f x 1 f x 2 f x 含義為放置的所有數中有 x 個數錯位排列的情況數。假定當前準備放置第 x 個數。初始時將第 x 個數放在標號為 x 的位置。此時需要將 x 與前 x 1 個數中的某乙個交換 若前 x 1 個數均錯位排列,那麼目前有 x 1 種交換方案,即 f x le...
組合數的一些性質
眾所周知,當n,m在自然數集中有 cm n n m n m 由此可證得cm n cm n 1 cm 1 n 1 而cm n 1 mc n m 1m是否也能用兩個組合數來表示cm n答案是肯定的。容易猜想cm n c m n 1 cm 1 n 1而且猜想很容易證得是正確的。證明如下 cm n 1 m ...
學習筆記 關於組合數的一些總結
1 dbinom dbinom 2 dbinom dbinomm dbinom 3 sum limits dbinom dbinom 4 sum limits n dbinom dbinom 5 a b n sum limits n dbinoma ib 6 sum limits m dbinom ...