莫反
void get_mu(int n)
{
mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i]){prim[++cnt]=i;mu[i]=-1;}
for(int j=1;j<=cnt&&prim[j]*i<=n;j++)
{
vis[prim[j]*i]=1;
if(i%prim[j]==0)break;
else mu[i*prim[j]]=-mu[i];
}
}
}
蒯的线性筛 \(mu\) 函数。
有:
则:
可重集组合
有 \(k\) 种物品,每个物品有无限个,问选出 \(n\) 个物品的方案数有多少种。
直接考虑隔板法,即将 \(n\) 分成可以为 \(0\) 的 \(k\) 段即可,等价于将 \(n + k\) 分成非 \(0\) 的 \(k\) 段。 只需要在 \(n + k − 1\) 个空隙中插入 \(k − 1\) 个板子即可。
所以方案数是:
圆排列
\(n\) 个物体要选出 \(m\) 个摆成一个环,问有多少种方案。
二项式定理
容斥原理
很广,这个用的多些。
卡特兰数
\(n\) 边型的三角切割方案数,也等于 \(n\) 个元素的出栈序列,还有 左右括号的合法序列 也是卡特兰数。
前几项是 \(1, 2, 5, 14, 42, 132\)。
通项:
第一类斯特林数
$ {n\brack m}$ 表示 \(n\) 个元素分成 \(m\) 个环的方案数。
递推式:
运用:
第二类斯特林数
\({ n\brace m }\) 表示将 \(n\) 个元素放入 \(m\) 个相同盒子里,每个盒子非空的方案数。
递推式:
运用: