【学习笔记】莫比乌斯函数

传送门 to PoPoQQQ神犇,膜拜一下。

概述

一个神奇的函数。定义也很神奇。是个积性函数。

定义

μ ( 1 ) = 1 \mu(1)=1 μ(1)=1 。对于 x ( x > 1 ) x(x>1) x(x>1),若 x = p 1 t 1 p 2 t 2 p 3 t 3 … p m t m x=p_1^{t_1}p_2^{t_2}p_3^{t_3}\dots p_m^{t_m} x=p1t1p2t2p3t3pmtm (指 x x x 的唯一素数分解), μ ( x ) = { ( − 1 ) m ( ∀ y ∈ [ 1 , m ] , t y = 1 ) 0 ( ∃ y ∈ [ 1 , m ] , t y > 1 ) \mu(x)=\begin{cases}(-1)^{m} & (\forall y\in [1,m],t_y=1)\\ 0 & (\exist y\in[1,m],t_y>1)\end{cases} μ(x)={(1)m0(y[1,m],ty=1)(y[1,m],ty>1)

应用

思想是类似 容斥 的玩意儿。(看到负一的多少多少次方,很有可能是容斥嘛!)

莫比乌斯反演

考虑这样的定义:

F ( x ) = ∑ y ∣ x f ( y ) F(x)=\sum_{y|x}f(y) F(x)=yxf(y)

现在我们要想办法用 F F F 表示 f f f

  1. F ( x ) F(x) F(x) 中有 f ( x ) f(x) f(x) 这一项。先拿一个 F ( x ) F(x) F(x)
  2. 多出来的是 x x x的其他因子。只好减掉。

怎么枚举其他因子?只需要在唯一素数分解中任选一个质因数,将其指数减少一即可。

但是,如果有两个质因数,其指数都少了一,怎么办?加回来。

或者用韦恩图来表示这一关系。不妨设 x x x 只有三个质因数。

在这里插入图片描述

y y y x x x 的因数,充要条件是:唯一素数分解下, y y y 的每一个质因数的指数都不大于 x x x 的对应指数。

所以, x x x 的全部因数(不包含 x x x ),就是上图中的全集(至少有一个质因数的指数是严格小于)。此时便可容斥。

最后写结论。 f ( x ) = ∑ y ∣ x μ ( y ) F ( x y ) f(x)=\sum_{y|x}\mu(y)F\left(\frac{x}{y}\right) f(x)=yxμ(y)F(yx)

还有另一种形式,也是容斥: F ( d ) = ∑ d ∣ n f ( n )    ⇔    f ( d ) = ∑ d ∣ n μ ( n d ) F ( n ) F(d)=\sum_{d|n}f(n)\;\Leftrightarrow\;f(d)=\sum_{d|n}\mu\left(\frac nd\right)F(n) F(d)=dnf(n)f(d)=dnμ(dn)F(n)

其他的函数

比如这样的函数:
S ( n , p ) = ∑ x = 1 n [ gcd ⁡ ( x , p ) = 1 ] S(n,p)=\sum_{x=1}^{n}[\gcd(x,p)=1] S(n,p)=x=1n[gcd(x,p)=1]

p = p 1 t 1 p 2 t 2 p 3 t 3 ⋯ p m m ( p x ∈ P ) p=p_1^{t_1}p_2^{t_2}p_3^{t_3}\cdots p_m^{m}(p_x\in \Bbb{P}) p=p1t1p2t2p3t3pmm(pxP) P \Bbb{P} P 是质数集。

考虑 p x p_x px 的倍数,必然不与 p p p 互质。这样的数有 p p x \frac{p}{p_x} pxp 个。

若减去 ∑ p p x \sum\frac{p}{p_x} pxp ,会重复。有些数又是 p x p_x px 的倍数,也是 p y ( x ≠ y ) p_y(x\ne y) py(x=y) 的倍数。需减去。

容斥思想很明显了嘛!

注意 x ≠ y x\ne y x=y 。因为 p x 2 p_x^2 px2 的倍数没有被多减去。

n ( n ≤ 1000000 ) n(n\le 1000000) n(n1000000) 最多有 7 7 7 个不同的质因数,复杂度就会是 O ( 2 7 ) \mathcal O(2^7) O(27) 。——事实上不会总是七个质因数的。

最后写结论。 S ( n , p ) = ∑ d ∣ p μ ( d ) ⌊ n d ⌋ S(n,p)=\sum_{d|p}\mu(d)\left\lfloor\frac{n}{d}\right\rfloor S(n,p)=dpμ(d)dn

奇怪的玩意儿

传说中的 ∑ d ∣ n μ ( d ) d = φ ( n ) n \sum_{d|n}\frac{\mu(d)}{d}=\frac{\varphi(n)}{n} dndμ(d)=nφ(n)

证明很简单,注意到 n = ∑ d ∣ n φ ( d ) n=\sum_{d|n}\varphi(d) n=dnφ(d) ,代入反演公式即可。

还有一个 ∑ x ∣ n μ ( x ) = ϵ ( n ) \sum_{x|n}\mu(x)=\epsilon(n) xnμ(x)=ϵ(n)

证明仍然很简单,利用 μ ( n ) = ∑ d ∣ n μ ( d ) ϵ ( n d ) \mu(n)=\sum_{d|n}\mu(d)\epsilon(\frac{n}{d}) μ(n)=dnμ(d)ϵ(dn) 进行反演的逆推。

计算

线性筛

可以在线性筛的同时一起计算,因为这是一个积性函数。

mu[1] = 1; // here it is!
for(int i=2; i<=n; ++i){
	if(isPrime[i]){
		primes.push_back(i);
		mu[i] = -1; // here it is!
	}
	for(int j=0,len=primes.size(); j<len; ++j){
		if(1ll*i*primes[j] > n) break;
		isPrime[i*primes[j]] = false;
		mu[i*primes[j]] = -mu[i]; // here it is!
		if(i%primes[j] == 0){
			mu[i*primes[j]] = 0; // here it is!
			break;
		}
	}
}

杜教筛

利用这条性质: ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] dnμ(d)=[n=1]

用狄利克雷卷积写出来就是 μ ∗ I = ϵ \mu * I=\epsilon μI=ϵ

所以

∑ i = 1 n ϵ ( n ) = ∑ i = 1 n I ( i ) S ( ⌊ n i ⌋ ) ⇒ S ( n ) = 1 − ∑ i = 2 n S ( ⌊ n i ⌋ ) \sum_{i=1}^{n}\epsilon(n)=\sum_{i=1}^{n}I(i)S\left(\left\lfloor\frac{n}{i}\right\rfloor\right)\\ \Rightarrow S(n)=1-\sum_{i=2}^{n}S\left(\left\lfloor\frac{n}{i}\right\rfloor\right) i=1nϵ(n)=i=1nI(i)S(in)S(n)=1i=2nS(in)

map<int,int> mp;
int sumMu(int n){
	if(n < sqrtN) return mu[n];
	if(mp.count(n)) return mp[n];
	int res = 1;
	for(long long l=2,r; l<=n; l=r){
		r = n/(n/l)+1;
		res = (res-(r-l)*sumMu(n/l)%Mod+Mod)%Mod;
	}
	return mp[n] = res;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值