看這個之前建議先看一下n!……
對於組合數我們可以將其表示成階乘的形式
:c(n,k)=
。那我們不妨把這三個階乘全部表示成上個專題的形式。這樣的話,如果對於
e1>e2+e3
就可以被
p整除,
e1=e2+e3
就無法被
p整除。在無法被整除的情況下
c(n,k)=a1(a2a3)
-1
1view codeint mod_comb (int n, int k, int
p)
另外,我們也可以用
lucas
來求。lucas定理:我們令n=sp+q , m=tp+r(q,r ≤p)則有
具體證明如下:
首先我們先來證明乙個簡單的算式:
(f!=p&&f!=0)
c(p , f)%p= p!/(f!(p-f)!)%p因為p是素數,並且分母上的f和(p-f)都要比p要小,也就是說在分母上沒有數可以把p約去,所以c(p,f) %p一定等於0。
證明完了這個算式,我們就可以開始證明盧卡斯定理。
對於(1+x)sp+q≡(1+x)sp×(1+x)q≡((1+x)p)s×(1+x)q≡(根據二項式定理展開,然後在有上面的公式,所以我們可以得到)(1+xp)s×(1+x)q≡(再根據二項式定理展開)≡
(mod p)
最終我們可以得到
下面我們來計算一下左右兩邊xtp+r的係數:
左邊=c(sp+q ,tp+r);右邊=c(s ,t)×c(q, r)
因為左邊=右邊,所以我們最後得到了盧卡斯定理。
有了盧卡斯定理,我們就有了這樣的**,這個**真的很好理解
1view codeint lucas(int n,int m,intp)7
return
ans;
8 }
組合數取模
複習了一下組合數取模,當然推薦檢視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...
組合數取模
組合數c m,n 表示在m個不同的元素中取出n個元素 不要求有序 產生的方案數。定義式 c m,n m n m n 並不會使用latex qaq 根據題目中對組合數的需要,有不同的計算方法。運用乙個數學上的組合恒等式 oi中稱之為楊輝三角 c m,n c m 1,n 1 c m 1,n 證明 1.直...