【学习笔记】数论
哈哈。
正确性和复杂度的证明没给就是不会或者懒得写。
基础式子,定义
\(x\mid y\) 代表 \(x\) 整除 \(y\) 即 \(x\) 是 \(y\) 的因数。
多个数最大的公因数用 \(\gcd(a_1,a_2,\dots,a_n)\) 表示。
\((x,y)\) 表示 \(\gcd(x,y)\),\([x,y]\) 表示 \(\lcm(x,y)\)。
\([x]\) 中如果 \(x\) 为关系式,若 \(x\) 成立则 \([x]=1\),否则 \([x]=0\)。
积性函数
若函数 \(f(n)\) 满足 \(f(1)=1\) 且对于任何 \((i,j)=1\),有 \(f(i\times j)=f(i)\times f(j)\),则称 \(f(n)\) 为积性函数。
更甚,若函数 \(f(n)\) 满足 \(f(1)=1\) 且对于任意 \(i,j\) 都有 \(f(i\times j)=f(i)\times f(j)\),则称 \(f(n)\) 为完全积性函数。
若 \(f(x),g(x)\) 均为积性函数,那么以下函数皆为积性函数:
- \(h(x)=f(x^p)\),这个应该很简单,令 \(x=i\times j\) 且 \((i,j)=1\),那么 \((i^p,j^p)=1\)。所以 \(f(x^p)\) 是积性函数,
- \(h(x)=f^p(x)\),\(f^p(x)\) 定义是 \(f(x)\) 这个值的 \(p\) 次方,这个应该也很简单,每一个 \(f(x)=f(i)f(j)\),那么它们的 \(p\) 次方 \(f^p(x)=f^p(i)f^p(j)\),也即 \(h(x)=h(i)h(j)\)。
- \(h(x)=f(x)g(x)\),这个显然吧。
- \(h(x)=\sum_{k|x}f(k)g(\frac{x}{k})\)。挺好记的记就好了。
有一些常用的函数如下:
- 单位函数 \(\varepsilon(n)=[n=1]\),完全积性。卷积中有用。
- 恒等函数 \(id_k(n)=n^k\),完全积性,其中 \(id_1(n)\) 简记为 \(id(n)\)。
- 常数函数 \(1(n)=1\),完全积性。
- 除数函数 \(\sigma_k(x)=\sum_{i|x}i^k\),其中 \(\sigma_0(x)\) 代表 \(x\) 的因子个数,简记为 \(d(x)\),\(\sigma_1(x)\) 代表 \(x\) 的因子和,简记为 \(\sigma(x)\)。积性。对于 \(d(x\times y)\) 还有一个特殊性质:\(d(xy)=\sum_{i|x}\sum_{j|y}[gcd(i,j)=1]=\sum_{k|x,k|y}\mu(k)d(\frac{x}{k})d(\frac{y}{k})\)。
main
欧几里得定理
\(\gcd(a,b)=\gcd(b,a\bmod b)\)。其实挺简单,懒得证。
可以用来求两个数的 \(\gcd\),复杂度 \(O(\log \max(a,b))\)。
Il int gcd(int x,int y){return (y?gcd(y,x%y):x);}
扩展欧几里得算法(扩欧,exgcd)
给定 \(a,b\),求 \(ax+by=\gcd(a,b)\) 的任意一组整数解。
\(ax_1+by_1=\gcd(a,b)\),假设有方程 \(bx_2+(a\bmod b)y_2=\gcd(b,a\bmod b)\)。
由欧几里得定理 \(\gcd(a,b)=\gcd(b,a\bmod b)\),所以 \(ax_1+by_1=bx_2+(a\bmod b)y_2\)。
\(a\bmod b=a-\lfloor\frac{a}{b}\rfloor\times b\),代进去:
\(ax_1+by_1=bx_2+ay_2-(\lfloor\frac{a}{b}\rfloor\times b)y_2=ay_2+b(x_2-\lfloor\frac{a}{b}\rfloor y_2)\)。
所以我们如果得到了 \(x_2,y_2\),那么 \(x_1,y_1\) 的一种可能解就是 \(y_2,x_2-\lfloor\frac{a}{b}\rfloor y_2\)。
所以我们可以考虑递归求,找到一个边界 \(ax_k+by_k=\gcd(a,b)\) 中的 \(b\mid a\),那么 \(\gcd(a,b)=a\),此时的一个解为 \(x=1,y=0\)。
递归按求 \(\gcd\) 的方式递归下去,复杂度是 \(O(\log \max(a,b))\)。
扩欧得到的解一定满足 \(|x|\le a,|y|\le b\)。不会证,可能不补。
裴蜀定理(贝祖定理)
方程 \(ax+by=c\) 有整数解当且仅当 \(\gcd(a,b)\mid c\)。
这个很简单,\(\gcd(a,b)\mid ax\),\(\gcd(a,b)\mid by\),\(\therefore\gcd(a,b)\mid ax+by\)。
裴蜀能推广到多个数,不证。
关于逆元
\(x\) 在模 \(p\) 同余下若有逆元,则 \((x,p)=1\)。证明显然,\(xx^{-1}\equiv 1\pmod p\to xx^{-1}=kp+1\to xx^{-1}-kp=1\),这里面 \(x,p\) 都是给定常量,所以根据裴蜀可知这个方程有整数解当且仅当 \((x,p)=1\)。同理逆元可以直接用扩欧来算。
费马小定理
\(p\) 为质数且 \(a,p\) 互质时有 \(a^{p-1}=1\pmod p\)。可以通过这个加快速幂算逆元。
证明:
- 先假设有一个序列 \(A={1,2,\dots,p-1}\),取一个不是 \(p\) 的倍数 \(a\),有 \(\prod A_i=\prod aA_i\pmod p\)。先证明这个式子。
- 也就是所有 \(a\times A_i\pmod p\) 互不相等。考虑反证,假设有 \(a\times A_i=a\times A_j\pmod p\),因为 \(a,p\) 互质,显然就有 \(A_i=A_j\),产生了冲突。
- 所以 \((p-1)!\equiv a^{p-1}\times(p-1)!\pmod p\),那么就有 \(a^{p-1}\equiv1\pmod p\)。
欧拉筛(线性筛)
板子会背就行。板子里面在 \(i\equiv0\pmod{prime_j}\) 的时候就跳出标记合数的循环,原因是如果 \(i\) 被 \(prime_j\) 标记了,那么 \(i\) 乘上其他质数的答案一定也被 \(prime_j\) 标记了,所以每个合数会且只会被标记一遍。我们在线性筛的过程中能够得到每个合数的最小质因子。
根据数学知识我们知道 \(1\) 到 \(n\) 的质数约有 \(\frac{n}{\ln n}\) 个,如果我们能做到用不高于 \(\log_2\) 的复杂度对于质数求解答案,对于任意质数 \(p\),任意正整数 \(k\),能做到 \(O(1)\) 计算 \(f(p^k)\),就能做到对于积性函数 \(f\) 线性筛出 \(1\) 到 \(n\) 的答案。
威尔逊定理
学长说没什么用。正整数 \(p\) 是质数的充要条件是 \((p-1)!\equiv-1\pmod p\)。不证。
卢卡斯定理
用于解决大组合数的取模,式子是 \(\large\binom{n}{m}\bmod p=\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{m}{p}\rfloor}\times\binom{n\bmod p}{m\bmod p}\bmod p\)。要求 \(p\) 是质数。后面那个通过预处理阶乘做,前面那个可以继续递归求解,复杂度为 \(O(p+\log p)\),\(p\) 是预处理阶乘的复杂度,\(\log p\) 是模一个数至少减半,\(\log p\) 次之后 \(m\) 就会变成 \(0\) 进入到组合数边界。
中国剩余定理(CRT)
对于 \(n\) 个 \(x\equiv a_i\pmod{p_i}\) 的式子求通解。限制是对于任何 \(i\ne j\),有 \((p_i,p_j)=1\)。记 \(P=\prod p,P_i=\frac{P}{p_i}\),这里不模东西,一般来说可以开到 int128。然后 \(q_i\) 是 \(P_i\) 在模 \(p_i\) 意义下的逆元,那么该方程组有唯一通解 \(x=\sum_{i=1}^{n}a_iq_iP_i\pmod P\)。
证明:
- 对于 \(i\ne j\),\(P_i=0\pmod{p_i}\)
- 此时 \(x\bmod p_i=\sum_{j=1}^{n}[i==j]a_jq_jP_j\bmod p_i=a_iq_iP_i\bmod p_i=a_i\)
- 所以此时的 \(x\) 是方程组的解。唯一性不会证明不证了。
扩展中国剩余定理(exCRT)
普通的 CRT 适用范围太小了,要求过于严格,exCRT 可以基本做到全方面碾压普通 CRT。同样是 \(O(n\log V)\) 的复杂度,exCRT 不需要任何限制。
现在我们先考虑只有两个方程 \(\left\{\begin{matrix}x\equiv a_1\pmod{p_1}\\x\equiv a_2\pmod{p_2}\end{matrix}\right.\)。为了方便可以前面多加一个 \(x\equiv0\pmod1\)。首先可以转化为 \(x=k_1p_1+a_1=k_2p_2+a_2\),移项得 \(p_1k_1-p_2k_2=a_2-a_1\)。这是一个二元一次不定方程,可以用裴蜀判无解然后扩欧求一个方程 \(p_1K_1+p_2K_2=\gcd(p_1,p_2)\) 的解,那么 \(k_1=K_1\times\frac{a_2-a_1}{\gcd(p_1,p_2)},k_2=-K_2\times\frac{a_2-a_1}{\gcd(p_1,p_2)}\)。这个时候我们的 \(x\) 就可以等于 \(k_1p_1+a_1\)。令这个得到的解为 \(x_0\),可以先把它模一下 \(lcm(p_1,p_2)\)。显然它满足上面的方程,那么就能得到 \(x\) 的通解 \(x=x_0+k\times\text{lcm}(p_1,p_2)\),即 \(x\equiv x_0\bmod{lcm(p_1,p_2)}\pmod{lcm(p_1,p_2)}\)。这时我们把两个方程用 \(O(\log V)\) 的复杂度合并成了一个方程,这么合并下去就能得到解。
还看到另一种好理解的办法,我们假设已经求出来前 \(i-1\) 组的答案 \(la\),令 \(lp=lcm(p_1,p_2,\dots,p_{i-1})\),则对于任意整数 \(x\),\(ans+lp\times x\) 是前 \(i-1\) 组的解,所以我们就是想找到一个 \(x\) 使得 \(ans+lp\times x\equiv a_i\pmod{p_i}\),爆改一下式子就变成 \(lp\times x+p_i\times k=a_i-ans\),扩欧就好。
记得输出时再对答案取一次模,无论在过程中是否有取模。
欧拉函数
\(\varphi(x)\) 表示有多少个 \(i\) 满足 \(1\le i\le x,(i,x)=1\)。这是一个积性函数。显然 \(\varphi(1)=1\),对于质数 \(p\),\(\varphi(p)=p-1\)。
如果是仅求一个数的欧拉函数值,可以直接在质因子分解的时候做,对于一个包含的质因子 \(p\),每 \(p\) 个数中都有一个数的因子包含 \(p\),所以答案乘上 \(\frac{p-1}{p}\) 就好。有 \(\varphi(n)=n\times\prod\frac{p_i-1}{p_i}\)。
然后欧拉函数可以直接筛的。对于 \(p\) 是 \(n\) 的最小质因子,我们令 \(t=\frac{n}{p}\),如果 \((p,t)=1\) 那么 \(\varphi(n)\) 可以直接用 \(\varphi(t)\varphi(p)\) 表示出来。否则我们可以知道 \(n\) 中含有不止一个 \(p\),即 \(n\) 含有的所有质因子 \(t\) 都应该含有。那么 \(\varphi(n)=n\times\prod\frac{p_i-1}{p_i}=p\times t\times\prod\frac{p_i-1}{p_i}=p\times\varphi(t)\)。
注意这里求 \(\gcd\) 我们只需要知道 \(t\) 是否仍然包含 \(p\),可以改成取模,这样就能线性筛出来欧拉函数了。
性质:\(n=\sum_{k|n}\varphi(k)\)。证明用莫反,现在不会,摆了。
性质:对于任意 \(x>2\),都有 \(\varphi(x)\) 是偶数。
证明:
- 如果 \(x\) 是质数,那么 \(\varphi(x)=x-1\) 为偶数。否则 \(\varphi(x)=x\times\prod\frac{p_i-1}{p_i}\)。
- 对于任何 \(p_i\ne 2\),乘上的 \(p_i-1\) 会让 \(\varphi(x)\) 变成偶数。
- 如果 \(x\) 只有一种质因子 \(2\),因为 \(x\) 至少为 \(4\),而上式只能让 \(x\) 乘一个 \(\frac{1}{2}\),仍然是偶数。
根据上面那条性质我们可以得知对一个数 \(a\) 一直取 \(\varphi(a)\) 只需要 \(O(\log a)\) 次就能降到 \(1\)。
欧拉定理
若有 \((a,p)=1\),则 \(a^{\varphi(p)}\equiv 1\pmod p\)。可以用这个求逆元。但是求 \(\varphi(p)\) 是根号的,一般题目 \(p\) 确定也用不到线性筛,所以单纯用欧拉定理求逆元应该没用。
证明可以参考费马小定理的证明。可以构造一个长度为 \(\varphi(p)\) 的数列 \(P\),每一个数 \(P_i\) 就是那个和 \(p\) 互质的数,显然对于一个 \((a,p)=1\),\(\prod aP_i\equiv\prod P_i\pmod p\),同时约掉 \(\prod P_i\) 就可以得到欧拉定理的式子。
扩展欧拉定理
能够进行模意义下的光速幂,可以支持在指数过大比如无法存下来的时候将指数 \(p\) 化成一个可以支持的范围内,比如 \(\varphi(p)\)。
\(a^b\equiv\left\{\begin{matrix}a^{b\bmod\varphi(p)},\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \gcd(a,p)=1\\a^b,\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \gcd(a,p)\ne 1,b<\varphi(p)\\a^{(b\bmod\varphi(p))+\varphi(p)},\gcd(a,p)\ne1,b\ge\varphi(p)\end{matrix}\right.\pmod p\)。
显然通过这个我们能将指数降到一个 \(2\varphi(p)\) 的可以接受的范围内。至于定理的证明,可能待补,先贴链接。
欧拉反演
来自欧拉函数的一个性质 \(\sum_{d|n}\varphi(d)=n\)。
感性证明:
- 假设有 \(\frac{1}{n},\frac{2}{n},\dots,\frac{n}{n}\) 这 \(n\) 个分数,现约分到最简形式。
- 那么对于分母为 \(d\) 的分数 \(\frac{i}{d}\),有 \(i,d\) 互质且 \(i\le d\)。我们发现分母为 \(d\) 的分数个数就是 \(\varphi(d)\)。
- 因为是约分,所以分母 \(d\) 一定满足 \(d|n\),全部加起来就是总分数个数 \(n\)。
所以把 \(n\) 换成其他东西,比如 \(\gcd(x,y)\),可以得到 \(\sum_{d|\gcd(x,y)}\varphi(d)=\sum_{d|x,d|y}\varphi(d)\)。
欧拉反演公式:\(\sum_{i=1}^n\gcd(i,n)=\sum_{i=1}^n\sum_{d|n}[d|i]\varphi(d)=\sum_{d|n}\sum_{i=1}^n[d|i]\varphi(d)=\sum_{d|n}\frac{n}{d}\varphi(d)\)。考虑 \(1\) 到 \(n\) 中是 \(d\) 的倍数的数有 \(\frac{n}{d}\) 个。
拉格朗日定理
对于 \(n\) 次同余方程 \(f(x)=\sum_{i=0}^n a_ix^i\),其最多有 \(n\) 个不同解。不证。
阶
\(n\) 为 \(a\) 的阶,当且仅当存在 \(n\) 是满足同余式 \(a^n\equiv1\pmod m\) 的最小正整数,记作 \(\delta_m(a)\)。
\(a^1,a^2,\cdots,a^{\delta_m(a)}\) 模 \(m\) 互不同余。
- 若有 \(1\le i<j\le\delta_m\) 且 \(a^i\equiv a^j\pmod m\),则有 \(a^{j-i}\equiv1\pmod m\)。
- 显然有 \(1\le j-i<\delta_m(a)\),与阶最小性相冲突。
由此我们也可以推出若 \(a^n\equiv1\pmod m\),则 \(\delta_m(a)|n\)。
令 \(A=\delta_m(a),B=\delta_m(b),X=\delta_n(ab)\),则 \(X=AB\) 的充要条件是 \((A,B)=1\)。
必要性证明:
-
由 \(a^A\equiv1\pmod m,b^B\equiv1\pmod m\) 可得 \((ab)^{[A,B]}\equiv1\pmod m\)。
-
由前文性质可知 \(X|[A,B]\)。又由于 \(X=AB\) 所以有 \(AB|[A,B]\)。即为 \((A,B)=1\)。
充分性证明:
-
由定义 \((ab)^X\equiv1\pmod m\) 可知 \(((ab)^X)^B\equiv1\pmod m\),即 \(a^{XB}\equiv1\pmod m\),所以有 \(A|XB\)。
-
又因为有 \((A,B)=1\) 所以有 \(A|X\)。同理也有 \(B|X\)。所以可以得到 \(AB|X\)。
-
另一方面,\((ab)^{AB}\equiv(a^A)^B(b^B)^A\equiv1\pmod m\),所以有 \(X|AB\)。
-
结合起来得到 \(X=AB\)。
若 \((a,m)=1\),则 \(\delta_m(a^k)=\frac{\delta_m(a)}{(\delta_m(a),k)}\)。
原根
启动!?
正整数 \(g\) 是正整数 \(n\) 的原根,当且仅当 \(1\le g<n\) 且 \(g\) 模 \(n\) 的阶为 \(\varphi(n)\)。
当且仅当 \(m=2,4,p^k,2p^k\) 时,\(m\) 拥有至少一个原根,其中 \(p\) 是奇质数,不证。
模 \(m\) 的原根个数为 \(\varphi(\varphi(m))\)。其中最小原根大小不大于 \(m^{0.25}\) 级别。令最小原根为 \(g\),则其他原根皆为满足 \((i,\varphi(m))=1,i\le\varphi(m)\) 的 \(g^i\)。
若 \(g\) 为模 \(m\) 的原根,则对于任意 \(\varphi(m)\) 质因子 \(p\) 都有 \(g^{\frac{\varphi(m)}{p}}\not\equiv1\pmod m\)。
找最小原根直接枚举即可,复杂度不会太大?
库默尔定理
对 \({n+m\choose m}\) 质因数分解得到质数 \(p\) 的个数是 \(n+m\) 在 \(p\) 进制下进位的次数。不会证。
整除分块(数论分块)
\(O(\sqrt n)\) 计算 \(\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\) 之类的。考虑可以对于 \(\lfloor\frac{n}{i}\rfloor\) 相等的 \(i\) 一起讨论,显然这是相邻的。分块讨论是 \(O(\sqrt n)\) 块,且值 \(\lfloor\frac{n}{i}\rfloor\) 所在的块的最右段为 \(\left\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\right\rfloor\)。较为非常优美的形式。最喜欢的一集。
莫比乌斯函数
定义莫比乌斯函数 \(\mu(x)\),当 \(x\) 为 \(1\) 时,取值为 \(\mu(x)=1\),当 \(x\) 为一个除 \(1\) 外的平方数的倍数时,\(\mu(x)=0\),其他情况下 \(\mu(x)=(-1)^{\omega(x)}\),其中 \(\omega(x)\) 定义为 \(x\) 中本质不同的质因子个数,是一个加性函数,即对于互质的 \(a,b\),有 \(\omega(a)+\omega(b)=\omega(ab)\)。可以线性筛出来。比较难以描述,建议直接看代码。
Il void init(){
mu[1]=1;memset(isp,1,sizeof(isp));
for(Ri i=2;i<=n;i++){
if(isp[i])pr[++pn]=i,mu[i]=1;
for(Ri j=1;j<=pn**i*pr[j]<=n;j++){
isp[i*pr[j]]=0;mu[i*pr[j]]=-mu[i];
if(i%pr[j]==0){mu[i*pr[j]]=0;break;}
}
}
return;
}
卷积(狄利克雷卷积)
对于两个数论函数 \(f(x),g(x)\),它们的卷积定义为 \(h(x)=\sum_{d|x}f(d)g(\frac{x}{d})\),简记为 \(h=f*g\)。卷积带有交换律:\(f*g=g*f\)。卷积带有结合律:\(f*(g*h)=(f*g)*h\)。卷积带有分配率:\((f+h)*g=f*g+h*g\)。卷积拥有等式的性质:\(f=g\) 的充要条件是 \(f*h=g*h\),其中 \(h\) 满足 \(h(1)\ne0\)。积性函数的单位函数 \(\varepsilon\) 是单位元,也就是令 \(f*\varepsilon=f\) 的函数。两个积性函数的卷积也是积性函数。积性函数的逆元定义为 \(f*g=\varepsilon\) 的 \(g\),\(g\) 也是积性函数。
常见的 卷积式:不证。
- \(\varepsilon=\mu*1\)。
- \(d=1*1\)。
- \(\sigma=id*1\)。
- \(\varphi=\mu*id\)。
- \(id=\varphi*1\)。
莫比乌斯反演
反演结论:\(\sum_{d|\gcd(i,j)}\mu(d)=[\gcd(i,j)=1]\)。
证明:
- 我们证明 \(\mu*1=\varepsilon\),也可以表达成 \(\sum_{d|n}\mu(d)=[n=1]\),和上面的形式是一样的。
- 因为带有平方因子的数都不会造成贡献,令 \(n=\prod_{i=1}^k p_i^{c_i},n'=\prod_{i=1}^k p_i\)。
- 则 \(\sum_{d|n}\mu(d)=\sum_{d|n'}\mu(d)\)。所以所有 \(d\) 都是 \(k\) 中一些 \(p\) 组合出来的。排列组合得 \(\sum_{i=0}^k\binom{k}{i}(-1)^i\)。
- 典的二项式定理,得上式 \(=[k=0]\)。\(k=0\) 代表 \(n\) 没有任何质因子,所以原式 \(=[n=1]\)。
如果有 \(f(n)=\sum_{d|n}g(d)\),那么有 \(g(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})\)。这种情况下 \(f(n)\) 称作 \(g(n)\) 的莫比乌斯变换,\(g(n)\) 称作 \(f(n)\) 的莫比乌斯反演。
证明:
- \(\sum_{d|n}\mu(d)f(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}g(k)=\sum_{d|n}g(d)\sum_{k|\frac{n}{d}}\mu(k)\)。
- 最后一步变换了求和顺序,容易发现每一个原本对应的 \(g(d)\mu(k)\) 现在仍然对应一个 \(g(d)\mu(k)\) 所以仍然是正确的。
- 后面那一块可以用一个反演结论。所以 \(\sum_{d|n}g(d)\sum_{k|\frac{n}{d}}\mu(k)=\sum_{d|n}g(d)[n=d]=g(n)\)。
如果有 \(f(n)=\sum_{n|d}g(d)\),那么有 \(g(n)=\sum_{n|d}f(d)\mu(\frac{d}{n})\)。
证明:
- 考虑和上面类似的证明方式。把 \(d\) 用 \(n\) 的倍数形式表示。\(\sum_{n|d}\mu(\frac{d}{n})f(d)=\sum_{k=1}\mu(k)f(kn)\)。
- 把 \(f\) 拆开成 \(g\)。\(\sum_{k=1}\mu(k)\sum_{kn|d}g(d)\)。枚举 \(k\) 再枚举 \(kn\) 的倍数等价于枚举 \(n\) 的倍数然后枚举可行的 \(k\)。\(\sum_{n|d}g(d)\sum_{k|\frac{d}{n}}\mu(k)\)。
- 后面那一坨还是反演结论,\(\sum_{d|n}g(d)[d=n]=g(n)\)。
杜教筛
较快地计算某些数论函数的前缀和,即在低于线性的时间内计算 \(S(n)=\sum_{i=1}^n f(i)\)。
对于任意数论函数 \(f,g\) 令 \(h=f*g\),则 \(\sum_{i=1}^n h(i)=\sum_{i=1}^n\sum_{d|i}g(d)f(\frac{i}{d})\)。考虑常见的枚举 \(d\),得到上式 \(=\sum_{d=1}^ng(d)\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}f(k)=\sum_{d=1}^n g(d)S(\lfloor\frac{n}{i}\rfloor)\)。
考虑 \(g(1)S(n)\) 的特殊含义。显然 \(g(1)S(n)=\sum_{i=1}^n g(i)S(\lfloor\frac{n}{i}\rfloor)-\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\)。前面那个可以转化成 \(\sum_{i=1}^n(f*g)(i)\)。
得到杜教筛核心式子 \(g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^n g(i)S(\lfloor\frac{n}{i}\rfloor)\)。如果我们令 \(g\) 为积性函数,则得到 \(S(n)\) 的取值,如果我们能找到一个合适的积性函数 \(g\)(注意 \(f\) 不一定需要为积性),并且支持快速求 \(g\) 和 \(f*g\) 的前缀和,后面的部分可以递归数论分块做,那么我们就达到低于线性的复杂度内求得 \(f\) 的前缀和。
朴素杜教筛的复杂度为 \(O(n^{\frac{3}{4}})\)。不会证。
有一个优化,即提前筛出 \(f\) 的前 \(m=n^{\frac{2}{3}}\) 个答案(前提是能线性筛出)后再使用杜教筛,可以使复杂度平衡至 \(O(n^{\frac{2}{3}})\)。可以加上哈希表进行记忆化。