莫比乌斯函数和莫比乌斯反演

来源:互联网 发布:软件系统架构师 编辑:程序博客网 时间:2024/05/29 11:57

莫比乌斯函数和莫比乌斯反演

莫比乌斯函数

数论函数:定义域为正整数、陪域为复数的函数,下面讨论的函数均为数论函数。
莫比乌斯函数μ(d)
- 若d=1μ(d)=1
- 若d=p1p2pkpi为互异素数,μ(d)=(1)k
- 其他情况μ(d)=0

莫比乌斯函数性质:
1. 莫比乌斯函数是积性函数:μ(n)μ(m)=μ(mn)其中mn互质。
- 在数论中,互质的数满足此性质称为积性函数,任意数满足此性质称为完全积性函数
- 极性函数性质
- f(1)=1
- 积性函数的前缀和也是积性函数
2. d|nμ(d)n=1时为1n>1时值为0。(????在求 gcd=1或是用杜教筛求前缀和的时候都用的到。)
3. 对任意正整数nd|nμ(d)d=φ(n)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)

0 0