FSYo讲数论函数 ,Orz
一些数论积性函数
莫比乌斯函数,\(\mu\) 函数
\[\mu= \begin{cases} 1,&n=1\\ (-1)^c,&n=\prod_{i=1}^c p\\ 0,&n=k^2t \qquad (k>1) \end{cases} \]
元函数,\(\varepsilon\) 函数
\[\varepsilon= \begin{cases} 1,&n=1\\ 0,&n\ne1 \end{cases} \]
单位函数,\(id\) 函数
\[id=n \]
恒等函数,\(I\) 函数
\[I=1 \]
欧拉函数,\(\varphi\) 函数
\[\varphi=\sum_{d\leq n}[\gcd(d,n)=1] \]
因子和函数,\(\sigma\) 函数
\[\sigma=\sum_{d\mid n}d \]
约数个数,\(d\) 函数
\[d=\sum_{d\mid n} 1 \]
狄利克雷卷积
\[h=f\ast g \]
\[h(n)=\sum_{d\mid n}f(d)g(\frac nd) \]
两个积性函数做狄利克雷卷积得到的也是积性函数。
整除分块
blog
在莫比乌斯反演中广泛使用,推完的式子中经常出现,可以将 \(O(n)\) 优化至 \(O(\sqrt n)\),如果有多个整除也可以用,例如:
for(int l=1,r=min(n/(n/l),m/(m/l));;){
//dosomething
l=r+1;if(l>mn)break;
r=min(n/(n/l),m/(m/l));
}
另外有个东西是 \(\lfloor\dfrac{\lfloor\dfrac{b}{k}\rfloor}{l}\rfloor=\lfloor\dfrac{{b}}{kl}\rfloor\)
考虑一下 \(\lfloor\dfrac{b}{k}\rfloor\) 和 \(\dfrac{b}{k}\) 对于整除 \(l\) 的区别,\(\dfrac{b}{k}=\lfloor\dfrac{b}{k}\rfloor+\{\dfrac{b}{k}\}\),显然后面的小数对于整除 \(l\) 是没有影响的,所以就有 \(\lfloor\dfrac{\lfloor\dfrac{b}{k}\rfloor}{l}\rfloor=\lfloor\dfrac{\dfrac{b}{k}}{l}\rfloor\) 了。
神秘的知识
一些数论函数的卷积
\(I\ast I=d\)
\(I\ast id=\sigma\)
\(\varepsilon\ast I_k=I_k\)
\(d(ij)=\sum\limits_{x\mid i}\sum\limits_{y\mid j}[\gcd(x,y)=1]\)
考虑枚举 \(xy\) 是 \(ij\) 的约数,视为 \(\prod\limits^tp_i^{k_i}\) 那么每个 \(p_i^{k_i}\) 应保证只会被一种方式枚举到。
我们规定 \(k_i\) 个 \(p_i\) 优先在 \(x\) 中选,假设 \(x\) 中 \(p_i\) 的个数为 \(c\),那么 \(k_i\le c\) 时,只有 \(x\) 中被选到了,当 \(k_i>c\) 时 \(x\) 中被选完,剩下的在 \(y\) 中选,我们把在 \(x\) 中被选完,\(y\) 中选 \(d\) 个映射到只在 \(y\) 中选 \(d\) 个,于是此时 \(\gcd(x,y)=1\),也就是式子中的枚举方法是正确的。
\(\varphi\ast I=id\)
证
即 \(n=\sum\limits_{d\mid n}\varphi(d)\).
考虑这样的分数约分:
\[\frac{1}{12},\frac{2}{12},\frac{3}{12},\frac{4}{12},\frac{5}{12},\frac{6}{12},\frac{7}{12},\frac{8}{12},\frac{9}{12},\frac{10}{12},\frac{11}{12},\frac{12}{12}\\ \frac{1}{12},\frac{1}{6},\frac{1}{4},\frac{1}{3},\frac{5}{12},\frac{1}{2},\frac{7}{12},\frac{2}{3},\frac{3}{4},\frac{5}{6},\frac{11}{12},\frac{1}{1} \]
发现很显然,不会严格证,感觉证起来好麻烦,但是这样理解起来就很清晰了。
\(I*\mu=\varepsilon\)
证
\[I\ast \mu=\sum_{d\mid n}\mu(d) \]
求和写出来应该是 \(1+(-1)+1+\cdots\) 这样 \(1\) 和 \(-1\) 的和。
假设 \(n=\prod\limits^{t} p_i^{k_i}\),那么考虑每个 \(p_i\) 的选或不选,有贡献的 \(d\) 一共就有 \(2^t\) 个。
然后选奇数个 \(p\) 的贡献为 \(-1\),选偶数个 \(p\) 的贡献为 \(1\),那么就是 \(\dbinom t0-\dbinom t1+\dbinom t2-\cdots\),也就是 \(\sum\limits_{i=0}^{t}(-1)^i\dbinom ti\) ,发现是二项式定理的形式,也就是 \((1-1)^t\),也就是 \([t=0]=\varepsilon(t)\),所以 \(I\ast \mu=\varepsilon\)。
\(id\ast\mu=\varphi\)
证
我们有
\(\varphi\ast I=id\)
左右两边都卷个 \(\mu\)
\(\varphi\ast I\ast\mu=id\ast\mu\)
于是
\(id\ast\mu=\varphi\)
莫比乌斯反演
\[F(n)=\sum_{d\mid n}f(d)\Rightarrow f(n)=\sum_{d\mid n}\mu(d)F(\frac nd) \]
证
\[F=f\ast I \]
\[\mu\ast F=f\ast I\ast\mu \]
\[f=\mu\ast F \]
基操
\[\sum_{i=1}^{n}\sum_{j=1}^{n}[\gcd(i,j)=1]\\ =\sum_{i=1}^{n}\sum_{j=1}^{n}\varepsilon(\gcd(i,j))\\ =\sum_{i=1}^{n}\sum_{j=1}^{n}I*\mu(\gcd(i,j))\\ =\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{d\mid \gcd(i,j)}\mu(d)\\ =\sum_{d=1}^{n}\mu(d)\sum_{i=1,d\mid i}^{n}\sum_{j=1,d\mid j}^n1\\ =\sum_{d=1}^n\mu(d)(\frac{n}{d})^2 \]
这个可以用在仪仗队那道题里。
例题
BZOJ2694/BZOJ4659
#2694. Lcm
设\(S(n)=\sum\limits_{i=1}^{n}i\),可以 \(O(1)\) 计算
\[\begin{align*} &\sum_{i=1}^A\sum_{j=1}^{B}\mu(\gcd(i,j))^2\operatorname{lcm}(i,j)\\ &=\sum_{d=1}^n\sum_{d\mid i}^A\sum_{d\mid j}^B\mu^2(d)\frac{ij}{d}[\gcd(i,j)=d]\\ &=\sum_{d=1}^{n}\sum_{i=1}^{A/d}\sum_{j=1}^{B/d}\mu^2(d)ijd[\gcd(i,j)=1]\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{i=1}^{A/d}\sum_{j=1}^{B/d}ij\sum_{l\mid\gcd(i,j)}\mu(l)\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{l}^{n/d}\mu(l)l^2\sum_{i=1}^{A/ld}\sum_{j=1}^{B/ld}ij\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{l}^{n/d}\mu(l)l^2\sum_{i=1}^{A/ld}\sum_{j=1}^{B/ld}ij\\ &=\sum_{d=1}^n\mu^2(d)d\sum_{l=1}^{n/d}\mu(l)l^2S(\frac A{ld})S(\frac B{ld})\\ &=\sum_{T=1}^{n}S(\frac AT)S(\frac BT)\sum_{d\mid T}\mu^2(d)d\mu(\frac Td)(\frac Td)^2 \end{align*} \]
左边用整除分块,最多 \(2(\sqrt A+\sqrt B)\) 块,右边枚举最大质因子次数为1的 \(d\) ,至多 \(n\) 个,然后就是枚举倍数,一共 \(\sum\limits_{d\le n}\dfrac nd\) 次,这个东西参考hrj给出的方法可以理解是 \(n\log n\) 的。

于是复杂度 \(O(4T\sqrt n+n\log n)\),可以过掉此题。
另外感性理解一下右边那坨里面 \(\mu^2(d)d\) 和 \(\mu(d)d^2\) 都是积性函数,所以整个都可以直接线筛。于是就可以 \(O(4T\sqrt n+n)\) 做。在 \(1\) 处的值是 \(1\),在 \(p\) 处的值是 \(p-p^2\),在 \(p^2\) 处的值是 \(-p^3\),在 \(p^k(k>2)\) 的点值是 \(0\),所以可以先把 \(p\) 和 \(p^2\) 的值筛出来,再重新筛其他的,具体可以看代码。
参考代码
P1829
P1829 [国家集训队]Crash的数字表格
\[\begin{align*} &\sum_{i=1}^n\sum_{j=1}^m\operatorname{lca}(i,j)\\ &=\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{\gcd(i,j)}\\ &=\sum_{d=1}^{min(n,m)}\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ijd[\gcd(i,j)=d]\\ &=\sum_{d=1}d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}ij\sum_{l\mid\gcd(i,j)}\mu(l)\\ &=\sum_{d}d\sum_{l=1}^{n/d}\mu(l)l^2\sum_{i=1}^{n/ld}\sum_{j=1}^{m/ld}ij\\ &=\sum_dd\sum_l\mu(l)l^2S(\frac n{ld})S(\frac m{ld})\\ &=\sum_{T=1}^{n}S(\frac nT)S(\frac mT)\sum_{l\mid T}\mu(l)l^2(\frac Tl)\\ &=\sum_{T=1}^{n}TS(\frac nT)S(\frac mT)\sum_{l\mid T}\mu(l)l \end{align*} \]
前面的一样可以整除分块,于是我们来看 \(\sum\limits_{l\mid T}\mu(l)l\)。如果 \(\mu(l)l\) 也是积性函数就可以线性筛,我们把这个式子看做 \(\mu\) 点乘 \(id\),也就是 \((\mu\cdot id)\)。我们考虑让它再卷上一个积性函数,如果得到的也是积性函数,那么这个函数也是积性函数。
我们让它卷上一个 \(id\),那么 \((\mu\cdot id)\ast id\) 写出来就是
\[\sum_{d\mid n}\mu(d)d*\frac nd\\ =n\sum_{d\mid n}\mu(d) \]
参考上面 \(I\ast \mu=\varepsilon\) 的证明,我们知道这个式子就是 \(\varepsilon\)。
也就是说,由 \((\mu\cdot id)\ast id=\varepsilon\) 得到 \((\mu\cdot id)\) 也是积性函数,于是 \(\sum\limits_{l\mid T}\mu(l)l\) 就可以线筛了,那么要线性筛一个积性函数,我们只需要知道它在 \(p^k\) 处的点值。
\(\sum\limits_{l\mid n}\mu(l)l\),我们发现只有 \(l=1\) 或 \(l=p\) 时有值,所以在 \(p^k\) 处的点值就是 \(1-p\)。好怪哦
参考代码
P3327
P3327 [SDOI2015]约数个数和
\[\begin{align*} &\sum_{i=1}^n\sum_{j=1}^md(ij)\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{x\mid i}\sum_{y\mid j}[\gcd(x,y)=1]\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{x\mid i}\sum_{y\mid j}\sum_{d\mid\gcd(x,y)}\mu(d)\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i,d\mid j}\mu(d)\sum_{d\mid x\mid i}\sum_{d\mid y\mid j}1\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i,d\mid j}\mu(d)\sum_{x\mid\frac id}\sum_{j\mid\frac jd}1\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i,d\mid j}\mu(d)d(\frac id)d(\frac jd)\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)\sum_{i=1}^{n/d}d(i)\sum_{j=1}^{m/d}d(j) \end{align*} \]
令 \(S(x)=\sum\limits_{i=1}^xd(i)\),可以 \(O(n)\) 预处理,\(O(1)\) 查询。
于是
\[\begin{align*} &\sum_{d=1}^{\min(n,m)}\mu(d)\sum_{i=1}^{n/d}d(i)\sum_{j=1}^{m/d}d(j)\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)S(\lfloor\frac nd\rfloor)S(\lfloor\frac md\rfloor) \end{align*} \]
\(\mu\) 可以提前 \(O(n)\) 筛出来,然后右边整除分块,左边 \(O(1)\) 查询,总时间复杂度 \(O(n+T\sqrt n)\).
参考代码
其他例题:
P3327 P2522 P1447