lucas定理 模板

来源:互联网 发布:linux内核编译过程 编辑:程序博客网 时间:2024/06/06 23:59
ll powMod(ll a, ll b, ll mod) {ll res = 1;while (b) {if (b & 1) res = (res * a) % mod;a = (a * a) % mod;b >>= 1;}return res;}ll comb(ll a, ll b, ll p) {if (a < b) return 0;if (a == b)  return 1;if (b > a - b) b = a - b;ll ans = 1, ca = 1, cb = 1;for (ll i = 0; i < b; i++) {ca = (ca * (a - i)) % p;cb = (cb * (b - i)) % p;}ans = (ca * powMod(cb, p - 2, p)) % p;return ans;}ll lucas(ll n, ll m, ll p) {ll ans = 1;while (n && m && ans) {ans = (ans * comb(n % p, m % p, p)) % p;n /= p;m /= p;}return ans;}

0 0
原创粉丝点击