min_25筛
用途
設f(x)f(x)f(x)是一個積性函數,min_25篩可以在O(n34log?n)O(\frac{n^{\frac{3}{4}}}{\log n})O(lognn43??)內求f(x)f(x)f(x)的前綴和:∑i=1Nf(i)\sum_{i=1}^{N}f(i)∑i=1N?f(i)
使用要求:f(p),f(pk)f(p),f(p^k)f(p),f(pk)的值可以快速求出(p∈Prime)(p\in Prime)(p∈Prime)
算法
Step 1:求∑i=1n[i∈Prime]f(i)\sum_{i=1}^{n}[i\in Prime]f(i)∑i=1n?[i∈Prime]f(i)
約定PPP表示質數集合,PiP_iPi?表示第iii個質數
首先我們要根據f(x)f(x)f(x)在質數處的點值的表達式構造出F(x)F(x)F(x)(有時需要把f(x)f(x)f(x)拆成多個F(x)F(x)F(x)),滿足 F(x)F(x)F(x)是一個完全積性函數,并且F(x)F(x)F(x)的和可以迅速轉換成f(x)f(x)f(x)的和
然后設g(n,j)=∑i=1nF(i)[i∈Pori的最小質因數>Pj]g(n,j)=\sum_{i=1}^nF(i)[i\in P\ \ or \ \ i的最小質因數>P_j ]g(n,j)=∑i=1n?F(i)[i∈P??or??i的最小質因數>Pj?]
∑i=1n[i∈P]F(i)\sum_{i=1}^{n}[i\in P]F(i)∑i=1n?[i∈P]F(i)即為g(n,∣P∣)g(n,|P|)g(n,∣P∣)(∣P∣|P|∣P∣是PPP集合的大小)
考慮ggg的轉移:
若Pj2>nP_j^2>nPj2?>n:
顯然不會產生新的貢獻了,此時有g(n,j)=g(n,j?1)g(n,j)=g(n,j?1)g(n,j)=g(n,j?1)
若Pj2≤nP_j^2\leq nPj2?≤n:
g(n,j)=g(n,j?1)?∑[i的最小質因數=Pj]F(i)g(n,j)=g(n,j-1)-\sum[i的最小質因數=P_j]F(i)g(n,j)=g(n,j?1)?∑[i的最小質因數=Pj?]F(i)
=g(n,j?1)?F(Pj)∑[i的最小質因數=Pj]F(iPj)=g(n,j-1)-F(P_j)\sum[i的最小質因數=P_j]F(\frac{i}{P_j})=g(n,j?1)?F(Pj?)∑[i的最小質因數=Pj?]F(Pj?i?)
=g(n,j?1)?F(Pj)∑k=Pj?nPj?[k的最小質因數>Pj?1]F(k)=g(n,j-1)-F(P_j)\sum_{k=P_j}^{\lfloor\frac{n}{P_j}\rfloor}[k的最小質因數>P_{j-1}]F(k)=g(n,j?1)?F(Pj?)∑k=Pj??Pj?n???[k的最小質因數>Pj?1?]F(k)
=g(n,j?1)?F(Pj)[g(?nPj?,j?1)?g(Pj?1,j?1)]=g(n,j-1)-F(P_j)[g(\lfloor\frac{n}{P_j}\rfloor,j-1)-g(P_j?1,j?1)]=g(n,j?1)?F(Pj?)[g(?Pj?n??,j?1)?g(Pj??1,j?1)]
關于ggg的初值:
考慮一下ggg的實際含義是什么呢?可以參考一下埃氏篩法的運行過程。
假設現在有nnn個數依次排開,第iii個數是f(i)f(i)f(i),根據埃氏篩法的那套理論,每次選出一個質數ppp,然后篩掉所有f(k×p)f(k\times p)f(k×p)(k>=2)(k>=2)(k>=2)
會發現g(n,j)g(n,j)g(n,j)就是運行jjj次埃氏篩法后,沒被篩掉的所有數之和。
這里遞推的起點是g(n,0)g(n,0)g(n,0),g(n,0)g(n,0)g(n,0)的含義是把所有的數字當作質數,然后求∑i=1nF(i)\sum_{i=1}^nF(i)∑i=1n?F(i)
最后,我們把F(x)F(x)F(x)轉回f(x)f(x)f(x),
用g(n,j)g(n,j)g(n,j)表示∑i=1nf(i)[i∈Pori的最小質因數>Pj]\sum_{i=1}^nf(i)[i\in P\ \ or \ \ i的最小質因數>P_j ]∑i=1n?f(i)[i∈P??or??i的最小質因數>Pj?],
∑i=1n[i∈P]f(i)\sum_{i=1}^{n}[i\in P]f(i)∑i=1n?[i∈P]f(i)即為g(n,∣P∣)g(n,|P|)g(n,∣P∣)
編碼細節:
Step 2:求最終答案
設S(n,j)=∑i=1nf(i)[i的最小質因數>=Pj]S(n,j)=\sum_{i=1}^{n}f(i)[i的最小質因數>=P_j]S(n,j)=∑i=1n?f(i)[i的最小質因數>=Pj?]
最終答案即為S(n,1)+f(1)S(n,1)+f(1)S(n,1)+f(1)
考慮SSS的轉移:
算1~n中質數的貢獻:
S(n,j)+=g(n,j)?∑i=1j?1f(Pi)S(n,j)+=g(n,j)?\sum_{i=1}^{j?1}f(P_i)S(n,j)+=g(n,j)?∑i=1j?1?f(Pi?)
(∑i=1j?1f(Pi)=g(Pj?1,j?1)\sum_{i=1}^{j?1}f(P_i)=g(P_{j-1},j-1)∑i=1j?1?f(Pi?)=g(Pj?1?,j?1))
算1~n中合數的貢獻:
S(n,j)+=∑k=jPk2≤n∑e=1Pke+1≤nS(nPke,k+1)×f(Pke)+f(Pke+1)S(n,j)+=\sum_{k=j}^{P_k^2\leq n}\sum_{e=1}^{P_k^{e+1}\leq n}S(\frac{n}{P_k^e},k+1)\times f(P_k^e)+f(P_k^{e+1})S(n,j)+=∑k=jPk2?≤n?∑e=1Pke+1?≤n?S(Pke?n?,k+1)×f(Pke?)+f(Pke+1?)
(枚舉合數的最小質因數及其最小質因數的指數)
邊界條件:
if(n<=1∣∣Pj>n)return0;if(n<=1||P_j>n)\ return\ 0;if(n<=1∣∣Pj?>n)?return?0;
編碼細節:
參考博客:
https://www.cnblogs.com/yoyoball/p/9185144.html
https://blog.csdn.net/baiyifeifei/article/details/90454317
https://www.cnblogs.com/zhoushuyu/p/9187319.html
https://www.cnblogs.com/cjyyb/p/9185093.html
總結
- 上一篇: 魅族推出 PANDAER 妙播联名收音机
- 下一篇: [XSY]Tree Ext(矩阵树定理,