萌新的莫反练习笔记
简单的数论函数
恒等函数 \(I(n)=1\)。
元函数 \(e(n)=[n=1]\)。
单位函数 \(id(n)=n\)。
狄利克雷卷积
我们设 \(f\) 和 \(g\) 的卷积 \(f\ast g=F\)。卷积还是一个函数。
那么,\(F(n)=\sum_{d|n}f(d)g(\frac{n}{d})\)。
这就是卷积。
显然,\(e\ast f=f\)。所以 \(e\) 是卷积的单位元。
常用的性质
- \(f\ast g=g\ast f\)。
- \((f\ast g)\ast h=g\ast (f\ast h)\)。
- 若 \(f\),\(g\) 为积性函数,则 \(f∗g\) 为积性函数。
- \(\varphi\ast I=id\)。
莫反
考虑现在有两个函数 \(f\) 和 \(F\),\(F=f\ast I\)。
如果 \(f\) 易求,我们可以容易地求出 \(F\)。
但是如果 \(F\) 易求,我们考虑如何求出 \(f\)。
我们在等式两边卷上 \(I\) 的逆元即可。
\(I\) 的逆元就是 \(\mu\),即 \(I\ast\mu=e\)。
所以 \(f=F\ast\mu\)。
然后就可以求出 \(f\) 了。可以使用整除分块等实现。
这就是莫反。
考虑什么样的人不会被挡住。
我们给每个人分配一个坐标,从 \((0,0)\) 到 \((n-1,n-1)\)。
那么,所有 \(gcd(x,y)=1\) 的点就能被看到。
那么,我们要求 \(\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=1]\)。
开始我们炫酷的计算:
\[\begin{align}
&\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=1]\nonumber\\
=&\sum_{i=1}^n\sum_{j=1}^ne(gcd(i,j))\nonumber\\
\end{align}
\]
考虑 \(e=I\ast\mu\):
\[\begin{align}
&\sum_{i=1}^n\sum_{j=1}^ne(gcd(i,j))\nonumber\\
=&\sum_{i=1}^n\sum_{j=1}^n\sum_{d|gcd(i,j)}\mu(d)\nonumber\\
=&\sum_{i=1}^n\sum_{j=1}^n\sum_{d|i,d|j}\mu(d)\nonumber\\
\end{align}
\]
考虑先枚举 \(d\):
\[\begin{align}
&\sum_{i=1}^n\sum_{j=1}^n\sum_{d|i,d|j}\mu(d)\nonumber\\
=&\sum_{d=1}^n\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}\mu(d)\nonumber\\
=&\sum_{d=1}^n\left\lfloor\frac{n}{d}\right\rfloor\left\lfloor\frac{n}{d}\right\rfloor\mu(d)\nonumber\\
\end{align}
\]
整除分块解决即可。
考虑只枚举 \(d\) 的倍数,然后套用上面的式子即可。
考虑枚举每个质数,算上面的那个东西。
稍微动动脑子发现复杂度不超过 \(O(n\log n)\)。
查看题解可得复杂度 \(O(\frac{n}{\log n})\)。
考虑上面求出的是一个二维前缀和的答案,现在要求矩形,那不是简简单单。
直接套用上面的即可。
有结论 \(d(nm)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=1]\)。
考虑感性证明,如果 \(gcd(i,j)>1\) 会算重,不能算。
我们考虑推这个式子。
\[\begin{align}
&\sum_{i=1}^n\sum_{j=1}^md(ij)\nonumber\\
=&\sum_{i=1}^n\sum_{j=1}^m\sum_{x=1}^i\sum_{y=1}^j[gcd(i,j)=1]\nonumber\\
=&\sum_{i=1}^n\sum_{j=1}^m\sum_{x=1}^i\sum_{y=1}^j\sum_{d|x,d|y}\mu(d)\nonumber\\
=&\sum_{d=1}^n\mu(d)\sum_{i=1}^n\sum_{j=1}^m\sum_{x=1}^{\lfloor\frac{i}{d}\rfloor}\sum_{y=1}^{\lfloor\frac{j}{d}\rfloor}1\nonumber\\
=&\sum_{d=1}^n\mu(d)\sum_{i=1}^n\left\lfloor\frac{i}{d}\right\rfloor\sum_{j=1}^m\left\lfloor\frac{j}{d}\right\rfloor\nonumber\\
\end{align}
\]
设 \(s(n)=\sum_{i=1}^n\left\lfloor\frac{i}{d}\right\rfloor\),显然,我们可以整除分块预预处理出 \(s\)。
然后就做完了,复杂度 \(O(n\sqrt{n}+T\sqrt{n})\)。
直接推式子。
\[\begin{align}
&\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\nonumber\\
=&\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\nonumber\\
=&\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{d}[gcd(i,j)=d]\nonumber\\
=&\sum_{d=1}^n\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}ijd[gcd(i,j)=1]\nonumber\\
=&\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}ij\sum_{k|i,k|j}\mu(k)\nonumber\\
=&\sum_{d=1}^nd\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}k^2\mu(k)\sum_{i=1}^{\lfloor\frac{n}{kd}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{kd}\rfloor}ij\nonumber\\
=&\sum_{k=1}^nk^2\mu(k)\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}d\sum_{i=1}^{\lfloor\frac{n}{kd}\rfloor}i\sum_{j=1}^{\lfloor\frac{m}{kd}\rfloor}j\nonumber\\
\end{align}
\]
后面那两项都是等差数列求和,可以 \(O(1)\) 算。
考虑到我们只对 \(k\) 做整除分块肯定是不行的,所有我们在对 \(k\) 做整除分块的同时对 \(d\) 做整除分块,也就是整除分块套整除分块。
\(x^2\mu(x)\) 可以直接筛出。
最终复杂度为 \(O(\sqrt{n}\times\sqrt{n}+n)=O(n)\)。
比上一题多了个限制,\(j>i\)。
我们直接改上面的式子:
\[\sum_{k=1}^nk^2\mu(k)\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}d\sum_{i=1}^{\lfloor\frac{n}{kd}\rfloor}i\sum_{j=i+1}^{\lfloor\frac{m}{kd}\rfloor}j\nonumber\\
\]
容易发现后面就是个上三角矩阵求和,用整体减去对角线即可。
时空复杂度不变。
你需要的不是我,而是一篇好的题解。
CYJian 的题解
GoPoux4 的题解
加强版卡空间,但是取模是自然溢出,直接#define int unsigned int
即可。
开摆
写不动了,就到这吧
(◉ω◉υ)⁼³₌₃