数论学习笔记

前言

该从哪写起呢。

积性函数

定义不再赘述。

常见的 φ\varphi μ\mu σ0\sigma_0 σ1\sigma_1都是积性函数。

其中σ0\sigma_0为约数个数和。 σ1\sigma_1为约数和。

μ\mu的定义为

\mu(n)=\left\{ \begin{array}{**lr**} 1 & & n=1\\ (-1)^s & & n=p_1p_2...p_s \\ 0 & & otherwise \end{array} \right.

在存在平方因子时μ\mu00

Dirichlet 卷积

本篇中所有的卷积 * 均为DirichletDirichlet卷积。

定义为

h(n)=dnf(d)g(dn)h(n)=\sum_{d|n}f(d)g(\frac{d}{n})

hhffgg 的卷积。

大概有一些显而易见的卷积恒等式,如

Id=φ1ϵ=μ1\begin{aligned} Id&=\varphi * 1\\ \epsilon&=\mu*1 \end{aligned}

第二个其实是 μ\mu 的定义式。

莫比乌斯反演

莫比乌斯反演指

f=g1g=fμ\begin{aligned} f&=g*1\\ g&=f*\mu \end{aligned}

不难发现,函数 11 也代表着将原函数做高维前缀和。

这与生成函数中的全 11 生成函数不谋而合。

证明根据定义。

g=gϵ=g1μ=fμ\begin{aligned} g&=g*\epsilon\\ &=g*1*\mu\\ &=f*\mu \end{aligned}

常用的形式为将 [gcd(x,y)=1][gcd(x,y)=1] 改写为dgcd(i,j)μ(d)\sum_{d|gcd(i,j)}\mu(d)

证明根据定义。

[gcd(x,y)=1]=ϵ(gcd(x,y))=μ1\begin{aligned} \left[gcd(x,y)=1\right]&=\epsilon(gcd(x,y))\\ &=\mu*1 \end{aligned}

题目

YY的GCD

i=1nj=1m[gcd(i,j)=p]\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=p]

先整个简单的。

i=1nj=1m[gcd(i,j)=1]=i=1nj=1mdgcd(i,j)μ(d)=d=1min(n,m)μ(d)ndmd\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=1]\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d|gcd(i,j)}\mu(d)\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)\left\lfloor\frac{n}{d}\right\rfloor\left\lfloor\dfrac{m}{d}\right\rfloor \end{aligned}

除法分块。

那就在上面的经典题外面枚举一个 pp

pi=1nj=1m[gcd(i,j)=p]=pd=1min(n,m)μ(d)ndpmdp\begin{aligned} &\sum_{p}\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=p]\\ =&\sum_p\sum_{d=1}^{\min(n,m)}\mu(d)\left\lfloor\frac{n}{dp}\right\rfloor\left\lfloor\dfrac{m}{dp}\right\rfloor \end{aligned}

我们还是希望预处理那个前缀和。 换元一下

t=1min(n,m)ptμ(tp)ntmt=t=1min(n,m)f(t)ntmt\begin{aligned} &\sum_{t=1}^{\min(n,m)}\sum_{p|t}\mu(\frac{t}{p})\left\lfloor\frac{n}{t}\right\rfloor\left\lfloor\dfrac{m}{t}\right\rfloor\\ =&\sum_{t=1}^{\min(n,m)}f(t)\left\lfloor\frac{n}{t}\right\rfloor\left\lfloor\dfrac{m}{t}\right\rfloor\\ \end{aligned}

我们依然可以预处理 ff ,复杂度为 埃筛的复杂度 O(nloglogn)O(nloglogn)

公约数的和

大概不是莫反的题。

i=1nj=i+1ngcd(i,j)\sum_{i=1}^n\sum_{j=i+1}^n\gcd(i,j)

考虑求

i=1nj=1ngcd(i,j)=d=1ndi=1nj=1n[gcd(i,j)=d]=d=1ndi=1ndj=1nd[gcd(i,j)=1]=d=1nd(2i=1ndφ(i)1)\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^n\gcd(i,j)\\ =&\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d]\\ =&\sum_{d=1}^nd\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{n}{d}}[gcd(i,j)=1]\\ =&\sum_{d=1}^nd(2\sum_{i=1}^{\frac{n}{d}}\varphi(i)-1) \end{aligned}

你发现他们长得都一样。

Product

再写一遍罢。

i=1nj=1nlcm(i,j)gcd(i,j)=i=1nj=1ni×jgcd2(i,j)\begin{aligned} &\prod_{i=1}^n\prod_{j=1}^n\frac{lcm(i,j)}{gcd(i,j)}\\ =&\prod_{i=1}^n\prod_{j=1}^n\frac{i\times j}{gcd^2(i,j)} \end{aligned}

分子随便算。

考虑求

i=1nj=1ngcd(i,j)=d=1ndi=1nj=1n[gcd(i,j)=d]=d=1ndi=1ndj=1nd[gcd(i,j)=1]=d=1nd2i=1ndφ(i)1\begin{aligned} &\prod_{i=1}^n\prod_{j=1}^ngcd(i,j)\\ =&\prod_{d=1}^nd\prod_{i=1}^n\prod_{j=1}^n[gcd(i,j)=d]\\ =&\prod_{d=1}^nd^{\sum_{i=1}^{\frac{n}{d}}{\sum_{j=1}^{\frac{n}{d}}}[gcd(i,j)=1]} \\ =&\prod_{d=1}^nd^{2{\sum_{i=1}^{\frac{n}{d}}\varphi(i)-1}} \end{aligned}

你发现他们好像确实一样。

约数个数和

i=1nj=1mσ0(i×j)\sum_{i=1}^n\sum_{j=1}^m\sigma_0(i\times j)

i=1nj=1mxiyj[gcd(x,y)=1]=x=1ny=1m[gcd(x,y)=1]nxmy=x=1ny=1m(dgcd(x,y)μ(d))nxmy=d=1min(n,m)μ(d)x=1ndy=1mdnxdmyd=d=1min(n,m)μ(d)f(nd)f(md)f(n)=i=1nni=k=1nd(k)\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\\ =&\sum_{x=1}^n\sum_{y=1}^m[gcd(x,y)=1]\lfloor\frac{n}{x}\rfloor\lfloor\dfrac{m}{y}\rfloor\\ =&\sum_{x=1}^n\sum_{y=1}^m(\sum_{d|gcd(x,y)}\mu(d))\lfloor\frac{n}{x}\rfloor \lfloor\dfrac{m}{y}\rfloor\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)\sum_{x=1}^{\frac{n}{d}}\sum_{y=1}^{\frac{m}{d}}\lfloor\frac{n}{xd}\rfloor \lfloor\dfrac{m}{yd}\rfloor\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)f(\lfloor\frac{n}{d}\rfloor)f(\lfloor\frac{m}{d}\rfloor) \\f(n)=&\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor=\sum_{k=1}^nd(k) \end{aligned}

你发现好像确确确实没啥区别。

对于最后一个式子考虑贡献。考虑每个数在nn内的倍数会出现即可。

数字表格

i=1nj=1mfgcd(i,j)\prod_{i=1}^n\prod_{j=1}^mf_{gcd(i,j)}

i=1nj=1mdi,djf(d)[gcd(i,j)=d]=d=1nf(d)i=1ndj=1md[gcd(i,j)]=1\begin{aligned} &\prod_{i=1}^n\prod_{j=1}^m\prod_{d|i,d|j}f(d)[gcd(i,j)=d]\\ =&\prod_{d=1}^nf(d)^{\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{m}{d}}[gcd(i,j)]=1} \end{aligned}

看指数很对味对吧。

i=1ndj=1md[gcd(i,j)=1]=p=1ndμ(p)ndpmdp\begin{aligned} &\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{m}{d}}[gcd(i,j)=1]\\ =&\sum_{p=1}^\frac{n}{d}\mu(p)\frac{n}{dp}\frac{m}{dp} \end{aligned}

枚举 T=dpT = dp 就可以有

T=1n(kTf(k)μ(Tk))nTmT\prod_{T=1}^n (\prod_{k|T}f(k)^{\mu(\frac{T}{k})})^{\frac{n}{T}\frac{m}{T}}

括号里面那个调和级数预处理前缀和即可。

p=1ndμ(p)ndpmdp\sum_{p=1}^{\frac{n}{d}}\mu(p)\frac{n}{dp}\frac{m}{dp}

最小公倍数之和

i=1nj=1nlcm(ai,aj)\sum_{i=1}^n\sum_{j=1}^nlcm(a_i,a_j)

只需要对每个数字单独统计贡献即可。

即求

i=1nj=1nlcm(i,j)×ci×cj\sum_{i=1}^n\sum_{j=1}^nlcm(i,j)\times c_i\times c_j

其中 cic_i 即为 数字 ii 出现的次数。

剩下的就是莫比乌斯反演非常基础的一些操作了。

i=1nj=1ni×jgcd(i,j)×ci×cj=i=1nj=1ndi,dj[gcd(i,j)=d]i×jd×ci×cj=d=1ni=1ndj=1nd[gcd(i,j)=1]i×j×d×cid×cjd=d=1nk=1ndi=1ndkj=1ndkμ(k)×k2×i×j×cidk×cjdk=d=1ndkk=1ndμ(k)×k(i=1ndki×cidk)2=T=1nT(kTμ(k)×k)(i=1nTi×ciT)2\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^n\frac{i\times j}{\gcd(i,j)}\times c_i \times c_j\\ =&\sum_{i=1}^n\sum_{j=1}^n\sum_{d|i,d|j}[gcd(i,j)=d]\frac{i\times j}{d}\times c_i \times c_j\\ =&\sum_{d=1}^n\sum_{i=1}^\frac{n}{d}\sum_{j=1}^\frac{n}{d}[gcd(i,j)=1]i \times j \times d\times c_{id} \times c_{jd}\\ =&\sum_{d=1}^n\sum_{k=1}^\frac{n}{d}\sum_{i=1}^\frac{n}{dk}\sum_{j=1}^\frac{n}{dk}\mu(k) \times k^2 \times i\times j \times c_{idk} \times c_{jdk}\\ =&\sum_{d=1}^ndk\sum_{k=1}^\frac{n}{d}\mu(k)\times k(\sum_{i=1}^\frac{n}{dk}i\times c_{idk})^2\\ =&\sum_{T=1}^nT(\sum_{k|T}\mu(k)\times k)(\sum_{i=1}^\frac{n}{T}i\times c_{iT})^2 \end{aligned}

于神之怒

Youwike の 怒 😡

i=1nj=1mgcd(i,j)k\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k

其中 kk 给定。

先推推试试嘛。

d=1ndkj=1ndj=1mdfi,fjμ(f)=d=1ndkf=1ndμ(f)ndfmdf=T=1nnTmT(dTμ(Td)×dk)=T=1nnTmTF(T)\begin{aligned} &\sum_{d=1}^nd^k\sum_{j=1}^\frac{n}{d}\sum_{j=1}^\frac{m}{d}\sum_{f|i,f|j}\mu(f)\\ =&\sum_{d=1}^nd^k\sum_{f=1}^\frac{n}{d}\mu(f) \lfloor\frac{n}{df}\rfloor\lfloor\frac{m}{df}\rfloor\\ =&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor(\sum_{d|T}\mu(\frac{T}{d})\times d^k)\\ =&\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor F(T) \end{aligned}

可以体会其中枚举约数,枚举倍数的转化。

发现后面就是就是 μidk\mu * idk

由于这两个都是积性函数,因此 FF 也是积性函数。

那么有

f(T)=i=1tf(pixi)f(pixi)=dpixiμ(pixid)idk(d)\begin{aligned} &f(T)=\prod_{i=1}^tf(p_i^{x_i})\\ &f(p_i^{x_i})=\sum_{d|p_i^{x_i}}\mu(\frac{p_i^{x_i}}{d})idk(d) \end{aligned}

对于 μ\mu 显然只有两种情况是没有平方因子的。

f(pixi)=idk(pixi)idk(pixi1)=(pik1)×pik×(xi1)\begin{aligned} &f(p_i^{x_i})=idk(p_i^{x_i})-idk(p_i^{x_i-1})\\ =&(p_i^{k}-1)\times p_i^{k\times (x_i-1)} \end{aligned}

写出来发现

f(pixi)=f(pixi1)idk(pi)f(p_i^{x_i})=f(p_i^{x_i-1})*idk(p_i)

就能够线性筛了。

杜教筛

一种用来快速计算数论函数前缀和的方法。

即求

S(n)=i=1nf(i)S(n)=\sum_{i=1}^nf(i)

我们考虑引入一个新的积性函数gg,考虑求 他们的卷积,求

i=1n(fg)(i)=i=1ndif(d)g(id)=d=1ng(d)i=1ndf(i)=d=1ng(d)S(nd)\begin{aligned} &\sum_{i=1}^n(f*g)(i)\\ =&\sum_{i=1}^n\sum_{d|i}f(d)g(\frac{i}{d})\\ =&\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor\dfrac{n}{d}\rfloor}f(i)\\ =&\sum_{d=1}^ng(d)S(\lfloor\dfrac{n}{d}\rfloor) \end{aligned}

把需要用到的 S(n)S(n)i=1i = 1 的情况提取出来,就能得到。

g(1)S(n)=d=1ng(d)S(nd)d=2ng(d)S(nd)=i=1n(fg)(i)d=2ng(d)S(nd)\begin{aligned} &g(1)S(n)=\sum_{d=1}^ng(d)S(\lfloor\dfrac{n}{d}\rfloor)-\sum_{d=2}^ng(d)S(\lfloor\dfrac{n}{d}\rfloor)\\ =&\sum_{i=1}^n(f*g)(i)-\sum_{d=2}^ng(d)S(\lfloor\dfrac{n}{d}\rfloor) \end{aligned}

需要找到一个 gg 快速计算前面和后面。

后面记忆化递归,并且在线性筛能搜索到的范围内直接进行计算,复杂度就可以优化到O(n23)O(n^{\frac{2}{3}})

对于常见的筛 μ\muφ\varphi 的前缀和

对于 μ\mu

我们选择 μ1=ϵ\mu * 1 = \epsilon 其中可以快速地计算出 ϵ\epsilon 的前缀和。

对于 φ\varphi

我们选择 φ1=id\varphi * 1 = id 其中可以快速的计算出 idid 的前缀和。