Lucas定理模板
2017-09-06 18:59
316 查看
Lucas定理是用来求解C(m,n)mod p的值的。其中m和n的值可以很大,p一定是素数。
对阶乘打表的模板
LL quick_mod(LL a, LL b, LL c)//费马小定理+快速幂求逆元
{
LL ans = 1;
while (b)
{
if (b%2==1)
ans = (ans*a) % c;
b /=2;
a = (a*a) % c;
}
return ans;
}
LL fac[MAXN];
void Get_Fac(LL m)//阶乘打表
{
fac[0] = 1;
for (int i = 1; i <= m; i++)
fac[i] = (fac[i - 1] * i) % m;
}
LL Lucas(LL n, LL m, LL p)//卢卡斯定理
{
LL ans = 1;
while (n && m)
{
LL a = n % p;
LL b = m % p;
if (a < b)
return 0;
ans = ((ans*fac[a] % p) * (quick_mod(fac[b] * fac[a - b] % p, p - 2, p))) % p;
n /= p;
m /= p;
}
return ans;
}
不用对阶乘打表的模板
LL quick_mod(LL a, LL b, LL c)
{
LL ans = 1;
while (b)
{
if (b % 2 == 1)
ans = (ans*a) % c;
b /= 2;
a = (a*a) % c;
}
return ans;
}
LL C(LL n, LL k,LL p) {
if (n < k)
return 0;
if (k > n - k)
k = n - k;
LL a = 1, b = 1;
for (int i = 0; i < k; i++)
{
a = a * (n - i) % p;
b = b * (i + 1) % p;
}
return a * quick_mod(b, p - 2,p) % p;
}
LL lucas(LL a, LL b,LL p)
{
if (b == 0)
return 1;
return C(a % p, b % p,p) * lucas(a / p, b / p,p) % p;
}
对阶乘打表的模板
LL quick_mod(LL a, LL b, LL c)//费马小定理+快速幂求逆元
{
LL ans = 1;
while (b)
{
if (b%2==1)
ans = (ans*a) % c;
b /=2;
a = (a*a) % c;
}
return ans;
}
LL fac[MAXN];
void Get_Fac(LL m)//阶乘打表
{
fac[0] = 1;
for (int i = 1; i <= m; i++)
fac[i] = (fac[i - 1] * i) % m;
}
LL Lucas(LL n, LL m, LL p)//卢卡斯定理
{
LL ans = 1;
while (n && m)
{
LL a = n % p;
LL b = m % p;
if (a < b)
return 0;
ans = ((ans*fac[a] % p) * (quick_mod(fac[b] * fac[a - b] % p, p - 2, p))) % p;
n /= p;
m /= p;
}
return ans;
}
不用对阶乘打表的模板
LL quick_mod(LL a, LL b, LL c)
{
LL ans = 1;
while (b)
{
if (b % 2 == 1)
ans = (ans*a) % c;
b /= 2;
a = (a*a) % c;
}
return ans;
}
LL C(LL n, LL k,LL p) {
if (n < k)
return 0;
if (k > n - k)
k = n - k;
LL a = 1, b = 1;
for (int i = 0; i < k; i++)
{
a = a * (n - i) % p;
b = b * (i + 1) % p;
}
return a * quick_mod(b, p - 2,p) % p;
}
LL lucas(LL a, LL b,LL p)
{
if (b == 0)
return 1;
return C(a % p, b % p,p) * lucas(a / p, b / p,p) % p;
}
相关文章推荐
- fzu 2020 Lucas 定理,组合数求模模板
- 洛谷.3807.[模板]卢卡斯定理(Lucas)
- 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数
- [数学] Lucas定理模板
- 【模板】Lucas定理
- 模板_Lucas定理
- 数论——Lucas定理模板
- Lucas定理模板
- FZU 2020 组合(组合数 lucas定理模板题)
- Lucas定理模板
- hdu 3037 Saving Beans(lucas定理模板)
- [HDU 3461] Saving Beans & 组合计数Lucas定理模板
- HDU3037Saving Beans 【组合数取模,即,LUCAS定理模板】
- bzoj4403 lucas定理模板
- 求大组合数取模的模板(lucas定理)
- 【数论】Lucas定理推导过程+模板
- Lucas定理模板【bzoj2982】【combination】
- HDU 3037 Saving Beans(Lucas定理模板题)
- [模板]-卢卡斯(Lucas)定理
- hdu 3037 Lucas定理模板