組合數取模

2021-08-01 00:13:44 字數 897 閱讀 3013

對於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 congruence relation holds:

where

andare the base p expansions of m and n respectively.

對於單獨的c(ni, mi) mod p,已知c(n, m) mod p = n!/(m!(n - m)!) mod p。顯然除法取模,這裡要用到m!(n-m)!的逆元。

根據費馬小定理:

已知(a, p) = 1,則 ap-1 ≡ 1 (mod p),  所以 a*ap-2 ≡ 1 (mod p)。

也就是 (m!(n-m)!)的逆元為 (m!(n-m)!)p-2 ;

**:

typedef long

long

ll;using

namespace

std;

ll exp_mod(ll a, ll b, ll p)

return

res;

}ll comb(ll a, ll b, ll p)

ans = (ca*exp_mod(cb, p - 2, p)) %p;

return

ans;

}ll lucas(

int n, int m, int

p)

return

ans;

}int

main()

return0;

}

組合數取模

複習了一下組合數取模,當然推薦檢視acdreamer的部落格啦,寫的確實好啦,自己把裡面的題目全a掉了。include include include include include include include using namespace std typedef long long ll l...

組合數取模

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

Lucas 組合數取模

組合數取模就是求 cn mmod p cmn modp 的值,當然根據n,m,p n,m p 的取值範圍不同,採取的方法也不一樣。p p 比較大就只能乙個乙個算如 ll c one by one ll n,ll m 組合數乙個乙個算但是不是很大的要預先處理好階乘 數很大需要逆元 typedef lo...