索引
前言
本篇内容全部为定理,无证明
定义
莫比乌斯函数的符号为(mu),通俗的来讲
[ mu(n) =
left{
egin{matrix}
1 & n=1\
(-1)^k & n = p_1p_2p_3dots p_k\
0 & ext{其他情况}
end{matrix}
ight.
]
简单的说就是,如果(n = 1), (mu(n) = 1);(n)的因数多于两个时(mu(d)=(-1)^k),(k)为(n)的因数个数,其余时候(mu(n)=0)。
其实真正的定义式如下:
[sum_{d|n} mu(d)=[n=1]
]
然而方便起见我们还是采用最上面那个。
莫比乌斯函数的三个性质
1、莫比乌斯函数在n=1时(sum_{d|n}mu(d))为1,其他时候为0
[sum_{d|n} mu(d)=[n=1]
]
P.S.这条本来不是性质,是定义
2、莫比乌斯函数是积性函数(不完全积性)
即:
[mu(m imes n) = mu(m) imes mu(n)
]
[ ext{当且仅当}gcd(m,n)=1
]
3、对于任意的整数n
[sum_{d|n}frac{mu(d)}{d}=frac{phi(n)}{n}
]
莫比乌斯反演
形式A
若在(N^+)上有两个函数(f(n))和(g(n))满足
[g(n)=sum_{d|n}f(n)
]
那么
[f(n)=sum_{d|n}mu(d)g(frac{n}{d})
]
形式B
若在(N^+)上有两个函数(f(n))和(g(n))满足
[g(n)=sum_{d|n}f(n)
]
那么
[f(n)=sum_{n|d}mu(frac{d}{n})g(d)
]
计算莫比乌斯函数
做法A:定义法
暴力枚举每一个数的质因子及其幂次,根据定义判断即可。效率较低。
做法B:线性筛
前文讲到了莫比乌斯函数是积性函数,那么我们珂以用线性筛来计算
首先,可以确定的是质数的函数值一定是(-1)
然后,如果是被素数更新到的合数,那么每一次都取反(1变-1,-1变1)。
要保证被最小的质因子更新
代码
void getMu(int n){
mu[1] = 1; is_not_prime[0] = is_not_prime[1] = 1;
for (int i = 2; i <= n; ++i){
if (!is_not_prime[i]) mu[primes[++prime_num] = i] = -1;
for (int j = 1; j <= prime_num && primes[j] * i <= n; ++j){
is_not_prime[i * primes[j]] = 1;
if (!(i % primes[j])) break;
else
mu[primes[j] * i] = -mu[i];
}
}
}
参考资料
莫比乌斯反演 作者:[中]·Gaussian 参考内容:部分性质
「莫比乌斯反演」学习笔记 作者:[中]·Chhokmah 参考内容:莫比乌斯函数的计算