不知道隔壁小姐姐会不会来看?
莫比乌斯函数
定义
μ(x)=⎩⎨⎧1(−1)k0(x=1)(x=∏pi, pi∈P, k=∣P∣)(other)
大概就是:
如果x能被表示为若偶数个不同素数的积, μ(x)=+1,x=1理解为0个素数;
如果x能被表示为若奇数个不同素数的积, μ(x)=−1;
其他情况μ(x)=0.
我们把它理解为一个容斥系数, 当我们在做一些有关素数的容斥时会用到.
一个性质
d∣n∑μ(d)⇔[n==1]
这个式子有一个比较巧妙的证明, 设k为n不同素因子的个数, 用二项式定理:
d∣n∑μ(d)=i=1∑k(−1)iCki=(1−1)k=[n==1]
求莫比乌斯函数[^1]
[^1]: 这里用到的是O(N)线性筛, 可能并不是那么优秀. (据说)对于一类数论函数求前缀和的问题, 杜教筛可以用做到低于线性的复杂度求解.
类似欧拉函数φ的容斥, 我们容易证明莫比乌斯函数μ也是线性的, 尝试用线性筛预处理.
除去x=1的特殊情况, 我们可以得到一个显然的结论: 对于素数p有μ(p)=−1.
每次在更新后面值的时候, μ(ip)=[i mod p>0]∗−μ(i).
[^2]: 网上普遍使用的是推式子的方式, 貌似没有这种方法劝退简单.
i∈[a,b], j∈[c,d]. 问:有多少对i,j满足(i,j)=k.
我们发现这个问题可以转化为求有多少对i,j满足(i,j)=1(i∈[⌊ka⌋,⌊kb⌋], j∈[⌊kc⌋,⌊kd⌋]),
问题转化为:
a∈[1,n], b∈[1,m]. 问:有多少对a,b满足(a,b)=1.
一个简单的想法: 容斥.
共有nm对数字, 容斥地处理每次某个素数集的倍数. 有奇数个素数则减去贡献, 有偶数个素数则补回贡献.
考虑使用莫比乌斯函数μ作为容斥系数.
我们枚举因子q, 贡献就是区间内包含q的对数, 只有包含不重复素因子的才做贡献.
i=1∑min(n,m)μ(i)⌊in⌋⌊im⌋
最后用整除分块将式子优化到O(N).
地理课累[^3]卷积
[^3]: 原文Dirichlet, 官译狄利克雷, 北爷译地理课累.
定义
定义f(x)和g(x)的Dirichlet卷积为:
(f∗g)(n)=d∣n∑f(d)g(dn)
一些性质
莫比乌斯反演
公式
对于两个数论函数f(x), g(x).
若f(n)=d∣n∑g(d),有g(n)=d∣n∑μ(dn)f(d)若f(n)=n∣d∑g(d),有g(n)=n∣d∑μ(nd)f(d)
第一种形式
原问题转化为已知f=g∗1证明g=f∗μ.
利用上文中Dirichlet卷积的性质:
ff∗μf∗μg=g∗1=g∗1∗μ=g∗ϵ=f∗μ
证毕.
第二种形式^6
考虑逆推这个式子.
===n∣d∑μ(nd)f(d)k=1∑+∞μ(k)f(kn)=k=1∑+∞μ(k)kn∣d∑g(d)n∣d∑g(d)k∣dn∑μ(k)=n∣d∑g(d)ϵ(dn)g(n)
我们把d表示为kn的形式, 然后把f的原定义代入式子.
发现枚举k再枚举kn的倍数可以转换为直接枚举n的倍数再求出k,
发现后面那一块其实就是ϵ, g∗ϵ=g.
证毕.
题意即:
i=1∑nj=1∑m[i,j]
略微转化一下,得到:
d∑min(n,m)d∗i=1∑⌊dn⌋j=1∑⌊dm⌋ϵ(gcd(i,j))∗i∗j
把后面的式子单独拿出来算,
f(a,b)===i=1∑aj=1∑bϵ(gcd(i,j))∗i∗jd=1∑min(a,b)μ(d)d∣i∑ad∣j∑bi∗jd=1∑min(a,b)μ(d)∗d2i=1∑⌊da⌋j=1∑⌊db⌋i∗j
发现后面这一块就是等差数列求和.
g(a,b)=i=1∑aj=1∑bi∗j=i=1∑ai∗j=1∑bj=4a(b+1)a(b+1)
所以
f(a,b)=d=1∑min(a,b)μ(d)∗d2∗g(⌊da⌋,⌊db⌋)
可以整除分块.
原式化为
d∑min(n,m)d∗f(⌊dn⌋,⌊dm⌋)
可以整除分块.
整个式子比较麻烦, 应该尽量降低代码耦合度(分解出f跟g两个函数应该就没问题了).
一天学废系列预告:
Polya定理
简单概率期望DP&高斯消元随机游走概率期望
Comments
0No comments yet.