給出組合數c(n,m), 表示從n個元素中選出m個元素的方案數。例如c(5,2) = 10, c(4,2) = 6.可是當n,m比較大的時候,c(n,m)很大!於是xiaobo希望你輸出 c(n,m) mod p的值!
lucas定理:
如果我們要求c(n,m)%p的值,那麼
進行推導可以得到
這一道題使用lucas定理的遞迴式
\[c^n_m \ mod \ p= c^_\times c^_ \ mod \ p
\]lucas遞迴邊界,\(m=0\) 那麼值就是1,其餘部分遞迴處理,
剩下的$ c(n%mod,m%mod) $就可以使用費馬小定理或者擴充套件歐幾里得來求出逆元算一下答案就可以了。
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define ms(a,b) memset(a,b,sizeof(a))
typedef long long ll;
ll n,m,p;
inline int read()
while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return w?-x:x;
}ll power(ll a,ll b)
return res;
}ll c(ll n,ll m)
return ans;
}ll lucas(ll n,ll m)
int main()
return 0;
}
Lucas定理 組合數取模
a b是非負整數,p是質數。ab寫成p進製 a a n a n 1 a 0 b b n b n 1 b 0 則組合數c a,b 與c a n b n c a n 1 b n 1 c a 0 b 0 modp同餘 即 lucas n,m,p c n p,m p lucas n p,m p,p 然而如果...
stone 組合數學 Lucas定理
傳送門解題思路 第i組的人數必須大於ci,於是我們可以將問題轉化為 n sum m ci 人分到m組中,且保證每一組的人數大於0,然後我們可以使用隔板法求出分的的組數 c m ci 我們可以直接通過基本的組合公式 費馬小定理直接求,也可以通過lucas定理求得 直接求 code includeusi...
Lucas 大組合數
題目 hdu 3037 題意 有n個樹,m個堅果,放到n個樹裡,可以不放完,有多少種方法。分析 得到組合數了。大組合數什麼費馬小定理,lucas定理都來了 總的說,不能用二維地推了,用的卻是組合數的定義。一般來說大組合通常要取模。那麼不能邊乘邊模,邊除邊模,等式不會成立。根據逆元,除以乙個數取模 乘...