[学习笔记] 初次见面,请多关照 (公式推导+题集)——杜教筛
篩積性函數的前綴和
- 常見積性函數
- 公式推導
- 狄利克雷卷積
- 杜教篩
- 實現
- 常見卷積
- 習題集
- Sum
- 神犇和蒟蒻
- 簡單的數學題
常見積性函數
∑d∣nφ(d)=n\sum_{d|n}φ(d)=nd∣n∑?φ(d)=n∑d∣nμ(d)=[n=1]\sum_{d|n}\mu(d)=[n=1]d∣n∑?μ(d)=[n=1]∑d∣nφ(d)×d=n×φ(n)+[n=1]2\sum_{d|n}φ(d)\times d=\frac{n\times φ(n)+[n=1]}{2}d∣n∑?φ(d)×d=2n×φ(n)+[n=1]?
公式推導
求∑i=1nf(i)\sum_{i=1}^nf(i)i=1∑n?f(i)
狄利克雷卷積
定義兩個數論函數f,gf,gf,g的狄利克雷卷積為hhh
(f?g)(n)=h(n)?h(n)=∑d∣nf(d)×g(nd)=∑d∣ng(d)×f(nd)(f*g)(n)=h(n) \Leftrightarrow\ h(n)=\sum_{d|n}f(d)\times g(\frac{n}ze8trgl8bvbq)=\sum_{d|n}g(d)\times f(\frac{n}ze8trgl8bvbq)(f?g)(n)=h(n)??h(n)=d∣n∑?f(d)×g(dn?)=d∣n∑?g(d)×f(dn?)
如果 f,gf,gf,g 是積性函數則 hhh 函數也是一個積性函數。
證明:令 n=x?y∧(x,y)=1n=x*y\wedge(x,y)=1n=x?y∧(x,y)=1。
h(n)=∑d∣nf(d)g(nd)?h(xy)=∑d1∣x,d2∣yf(d1d2)g(xd1yd2)=∑d1∣x,d2∣yf(d1)f(d2)g(xd1)g(yd2)h(n)=\sum_{d|n}f(d)g(\frac n d)\Leftrightarrow h(xy)=\sum_{d_1|x,d_2|y}f(d_1d_2)g(\frac x {d_1}\frac y {d_2})=\sum_{d_1|x,d_2|y}f(d_1)f(d_2)g(\frac x{d_1})g(\frac y{d_2})h(n)=d∣n∑?f(d)g(dn?)?h(xy)=d1?∣x,d2?∣y∑?f(d1?d2?)g(d1?x?d2?y?)=d1?∣x,d2?∣y∑?f(d1?)f(d2?)g(d1?x?)g(d2?y?)=∑d1∣xf(d1)g(xd1)∑d2∣yf(d2)g(yd2)=h(x)h(y)=\sum_{d_1|x}f(d_1)g(\frac x{d_1})\sum_{d_2|y}f(d_2)g(\frac{y}{d_2})=h(x)h(y)=d1?∣x∑?f(d1?)g(d1?x?)d2?∣y∑?f(d2?)g(d2?y?)=h(x)h(y)
卷積滿足乘法交換/結合律/分配律 (這不是重點😓)
f?g=g?ff*g=g*ff?g=g?f
(f?g)?h=f?(g?h)(f*g)*h=f*(g*h)(f?g)?h=f?(g?h)
(f+g)?h=f?h+g?h(f+g)*h=f*h+g*h(f+g)?h=f?h+g?h
杜教篩
杜教篩是一種以低于線性篩時間復雜度篩積性函數前綴和的篩法。
將所求問題定義成函數,令S(n)=∑i=1nf(i)S(n)=\sum_{i=1}^nf(i)S(n)=∑i=1n?f(i)
先推∑i=1nh(i)\sum_{i=1}^nh(i)∑i=1n?h(i)
∑i=1nh(i)\sum_{i=1}^nh(i)i=1∑n?h(i)=∑i=1n∑d∣ig(d)×f(id)=\sum_{i=1}^n\sum_{d|i}g(d)\times f(\frac{i}ze8trgl8bvbq)=i=1∑n?d∣i∑?g(d)×f(di?)=∑d=1ng(d)∑i=1?nd?f(i)=\sum_{d=1}^ng(d) \sum_{i=1}^{\lfloor\frac{n}ze8trgl8bvbq\rfloor}f(i)=d=1∑n?g(d)i=1∑?dn???f(i)=∑d=1ng(d)S(?nd?)=\sum_{d=1}^ng(d)S(\lfloor\frac{n}ze8trgl8bvbq\rfloor)=d=1∑n?g(d)S(?dn??)
將d=1d=1d=1的一項單獨提出來?\Downarrow?
=g(1)×S(n)+∑d=2ng(d)S(?nd?)=g(1)\times S(n)+\sum_{d=2}^ng(d)S(\lfloor\frac{n}ze8trgl8bvbq\rfloor)=g(1)×S(n)+d=2∑n?g(d)S(?dn??)g(1)×S(n)=∑i=1nh(i)?∑d=2ng(d)S(?nd?)g(1)\times S(n)=\sum_{i=1}^nh(i)-\sum_{d=2}^ng(d)S(\lfloor\frac{n}ze8trgl8bvbq\rfloor)g(1)×S(n)=i=1∑n?h(i)?d=2∑n?g(d)S(?dn??)
一般套路情況下g(1)=1g(1)=1g(1)=1
時間復雜度是 O(n23)O(n^\frac{2}{3})O(n32?),大概就是 SSS 函數可以記憶化遞歸,另外設定一個閥值 MMM 預處理 S(1~M)S(1\sim M)S(1~M) 內的信息。
當 MMM 大約取 n23n^\frac{2}{3}n32? 最優,讓預處理和后面記憶化的時間復雜度差不多。
實現
因為g,hg,hg,h都是我們自己選擇構造出來的,通過上面化出的最后式子來看
我們希望h(i)h(i)h(i)的前綴和是好求的,換言之就是很快就能求出來的
然后按S(?nd?)S(\lfloor\frac{n}ze8trgl8bvbq\rfloor)S(?dn??)可以對后面式子進行分塊處理
至于怎么選擇ggg和hhh,說實話只能觀察式子,或者結合以前的做題經驗套路
常見卷積
ⅠS(n)=∑i=1nμ(i)S(n)=\sum_{i=1}^n\mu(i)S(n)=∑i=1n?μ(i)
因為知道在莫比烏斯反演有個關于莫比烏斯函數的公式
∑d∣nμ(d)=[n=1]\sum_{d|n}\mu(d)=[n=1]d∣n∑?μ(d)=[n=1]
很容易想到?=μ?I?=\mu*I?=μ?I
?(n)=∑d∣nμ(d)×I(nd)=∑d∣nμ(d)=[n=1]?(n)=\sum_{d|n}\mu(d)\times I(\frac{n}ze8trgl8bvbq)=\sum_{d|n}\mu(d)=[n=1]?(n)=d∣n∑?μ(d)×I(dn?)=d∣n∑?μ(d)=[n=1]
Ⅱ s(n)=∑i=1nφ(i)s(n)=\sum_{i=1}^nφ(i)s(n)=∑i=1n?φ(i)
上述提到過一個公式
n=∑d∣nφ(d)n=\sum_{d|n}φ(d)n=d∣n∑?φ(d)
所以我們想到id=φ?Iid=φ*Iid=φ?I
id(n)=∑d∣nφ(d)×I(nd)=∑d∣nφ(d)=nid(n)=\sum_{d|n}φ(d)\times I(\frac{n}ze8trgl8bvbq)=\sum_{d|n}φ(d)=nid(n)=d∣n∑?φ(d)×I(dn?)=d∣n∑?φ(d)=n
Ⅲ S(n)=∑i=1nφ(i)×iS(n)=\sum_{i=1}^nφ(i)\times iS(n)=∑i=1n?φ(i)×i
乍一看似乎配不出什么鳥玩意兒
嘗試從狄利克雷卷積入手
h=f?g=∑d∣nf(d)×g(nd)=∑d∣nφ(d)×d×g(nd)h=f*g=\sum_{d|n}f(d)\times g(\frac{n}ze8trgl8bvbq)=\sum_{d|n}φ(d)\times d\times g(\frac{n}ze8trgl8bvbq)h=f?g=d∣n∑?f(d)×g(dn?)=d∣n∑?φ(d)×d×g(dn?)
我們想著如果能把fff順帶的多余的ddd除掉,嘗試給ggg配成ididid
h=∑d∣nφ(d)×d×nd=∑d∣n{φ(d)×n}=n∑d∣nφ(d)=n2h=\sum_{d|n}φ(d)\times d\times \frac{n}ze8trgl8bvbq=\sum_{d|n}\{φ(d)\times n\}=n\sum_{d|n}φ(d)=n^2h=d∣n∑?φ(d)×d×dn?=d∣n∑?{φ(d)×n}=nd∣n∑?φ(d)=n2
i2i^2i2的前綴和,欸好巧哦,由公式可以快速算出,所以成功配出來了g,hg,hg,h
∑i=1ni2=n×(n+1)×(2n+1)6\sum_{i=1}^ni^2=\frac{n\times (n+1)\times (2n+1)}{6}i=1∑n?i2=6n×(n+1)×(2n+1)?
∑i=1ni3=(∑i=1ni)2=[n×(n+1)2]2=n2(n+1)24\sum_{i=1}^ni^3=(\sum_{i=1}^ni)^2=[\frac{n\times (n+1)}{2}]^2=\frac{n^2(n+1)^2}{4}i=1∑n?i3=(i=1∑n?i)2=[2n×(n+1)?]2=4n2(n+1)2?
習題集
Sum
…
- solution
前面提過了id=φ?I,?=μ?Iid=φ*I,?=\mu*Iid=φ?I,?=μ?I,直接帶公式即可id,?id,?id,?就是hhh,φ,μφ,\muφ,μ就是fff,III是ggg
g(1)×S(n)=∑i=1nh(i)?∑d=2ng(d)S(?nd?)g(1)\times S(n)=\sum_{i=1}^nh(i)-\sum_{d=2}^ng(d)S(\lfloor\frac{n}ze8trgl8bvbq\rfloor)g(1)×S(n)=i=1∑n?h(i)?d=2∑n?g(d)S(?dn??) - code
神犇和蒟蒻
…
- solution
AAA很簡單,i2i^2i2的μ\muμ一定是000,所以AAA一定是111
考慮BBB,這里要用到歐拉函數的一個性質
如果i%j=0i\% j=0i%j=0,則φ(i×j)=φ(i)×jφ(i\times j)=φ(i)\times jφ(i×j)=φ(i)×j
所以φ(i2)=φ(i)×iφ(i^2)=φ(i)\times iφ(i2)=φ(i)×i,就神奇的轉化為了上面的應用公式三 - code
簡單的數學題
…
-
solution
取模的操作代碼里加入就可以了,下面式子中就省略不寫了
∑i=1n∑j=1ni×j×gcd(i,j)=∑i=1n∑j=1ni×j∑d∣i,d∣jφ(d)=∑d=1nφ(d)∑d∣i∑d∣jij\sum_{i=1}^n\sum_{j=1}^ni\times j\times gcd(i,j)=\sum_{i=1}^n\sum_{j=1}^ni\times j\sum_{d|i,d|j}φ(d)=\sum_{d=1}^nφ(d)\sum_{d|i}\sum_{d|j}iji=1∑n?j=1∑n?i×j×gcd(i,j)=i=1∑n?j=1∑n?i×jd∣i,d∣j∑?φ(d)=d=1∑n?φ(d)d∣i∑?d∣j∑?ij
=∑d=1nφ(d)×d2∑i=1?nd?i∑j=1?nd?j=∑d=1nφ(d)×d2(∑i=1?nd?i)2=\sum_{d=1}^nφ(d)\times d^2\sum_{i=1}^{\lfloor\frac{n}ze8trgl8bvbq\rfloor}i\sum_{j=1}^{\lfloor\frac{n}ze8trgl8bvbq\rfloor}j=\sum_{d=1}^nφ(d)\times d^2(\sum_{i=1}^{\lfloor\frac{n}ze8trgl8bvbq\rfloor}i)^2=d=1∑n?φ(d)×d2i=1∑?dn???ij=1∑?dn???j=d=1∑n?φ(d)×d2(i=1∑?dn???i)2
前面杜教篩,后面數論分塊
-
code
總結
以上是生活随笔為你收集整理的[学习笔记] 初次见面,请多关照 (公式推导+题集)——杜教筛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东 CEO 许冉:言犀大模型在消费导购
- 下一篇: DZY Loves Math IV(杜教