莫比乌斯函数和莫比乌斯反演
莫比乌斯函数
数论函数:定义域为正整数、陪域为复数的函数,下面讨论的函数均为数论函数。
莫比乌斯函数
μ(d)
:
- 若
d=1
,
μ(d)=1
- 若
d=p1p2…pk
,
pi
为互异素数,
μ(d)=(−1)k
- 其他情况
μ(d)=0
莫比乌斯函数性质:
1. 莫比乌斯函数是积性函数:
μ(n)μ(m)=μ(mn)
其中
m
与
- 在数论中,互质的数满足此性质称为积性函数,任意数满足此性质称为完全积性函数。
- 极性函数性质
-
f(1)=1
- 积性函数的前缀和也是积性函数
2.
∑d|nμ(d)
当
n=1
时为
1
,
3. 对任意正整数
n
有
性质1应用:可以线性筛法求莫比乌斯函数,每个数只被筛一次。
大于1的数字有3类:
- 质数:
μ(p)=−1
- 存在某个质因子的指数大于1:
μ(n)=0
- 是两个互质的数的积(是若干质数的积):
μ(pn)=−μ(n)
注意只有数存在最小质因子的指数大于 1 时,才会被直接筛为 0,其余的情况是由
μ(pn)=−μ(n)
得到的。
bool isPrime[maxn];
int primes[maxn], mu[maxn], cnt = 0;//primes数组个数小于maxn;cnt为素数个数
void mobius_sieve() {
memset(isPrime, true, sizeof isPrime);
mu[1] = 1;
cnt= 0;
for (int i = 2; i < maxn; ++i)
{
if (isPrime[i]) primes[cnt++] = i, mu[i] = -1;
static int d;
for (int j = 0; j < cnt && (d = i * primes[j]) < maxn; ++j)
{
isPrime[d] = false;
if (i % primes[j]) mu[d] = -mu[i];
else
{
mu[d] = 0;
break;
}
}
}
}
莫比乌斯反演
两种形式:
-
F(n)=∑d|nf(d)⇔f(n)=∑d|nμ(d)F(nd)
-
F(n)=∑n|df(d)⇔f(n)=∑n|dμ(dn)F(d)