min_25篩可以在\(o(\frac})\)(\(o(n^)\)?反正不會證)的時間內求出部分與素數有關的函式的字首和。在常規範圍內(一般\(10^\)),它比洲閣篩不知道高到**去了。
例:求積性函式\(f(x)\)的前\(n\)項和\((n\leqslant10^)\)
第一步:對於每個\(1\leqslant i\leqslant n\),都需要求出\(\sum_^[p\text]f(p)\)
由於只用求素數處的值,可以找乙個\(g(x)\)為完全積性函式,使得\(f(x)\)和\(g(x)\)在素數處相等,且\(g(x)\)容易求字首和。
設\(p_i\)為第\(i\)個素數,\(minp_i\)表示\(i\)的最小質因數,\(s_i=\sum_^g(p_j)\),\(t_=\sum_^[w\in p\;\text\;minp_w>p_j]g(w)\)。顯然,\(t_=\sum_^g(w)-1\)。
考慮如何由遞推得到\(t_\),可以看出\(t_=t_-(t_\rfloor,j-1}-s_)\times g(p_j)\),即從\(t_\)中減掉\(minp_x=p\)的\(g(x)\)。
但是,當\(\lfloor\frac\rfloor時,就會出現多減了的情況。仔細思考一下,當\(p_j^2\leqslant i\)且\(p_>i\)時,\(\forall x\in[2,i],minp_x\leqslant \sqrt\),即\(minp_x\leqslant p_j\),就可以停止計算,此時\(\lfloor\frac\rfloor\geqslant p_j>p_\),又由於\(p_i\)遞增,所以不會多減。
容易發現,第一維\(i\)只有\(o(\sqrt)\)種取值,所以可以做一些對映,再用滾動陣列優化掉第二維。設\(sum_i=t_\)。
複雜度:\(o(\text)\)。
第二步:求\(\sum_^nf(i)\)
設\(sol(i,j)=\sum_^n[w\in p\;\text\;minp_w\geqslant p_j]f(i)\),則\(sol(i,j)=sum_i+\sum_^2\leqslant i}\sum_^\leqslant i}(sol(\frac^k},id+1)-s_)*f(p_^k)+f(p_^)\),即列舉最小質因數出現的次數。
複雜度:\(o(\text)\)。
Min 25 篩學習筆記
資料和 出處 資料2資料3 打死我也不承認參考了yyb的 min 25 篩可以幹嘛?下文中未特殊說明 p 均指質數集合,p i 或 p 指某個具體質數。求一類積性函式 f x 的字首和,需要滿足 f p 可以寫成多項式的形式,或者操作一下可以寫成多項式 如例題 且 f p k 能快速求出。講真學這個...
Min 25 篩 學習筆記
埃氏篩法 整除分塊 這裡有提到 1.問題模型 2.min 25 篩 3.模板題以及模板 有乙個積性函式 f 對於所有質數 p f p 是關於 p 的多項式,f p k 非常容易計算 不一定是關於 p 的多項式 求 sum f i n leq 10 1s 設集合 p 表示素數集合。設 g sum f ...
Min 25篩 學習筆記
這兒只是乙個簡單說明 概括 總結。原理見這 min 25篩用來求積性函式字首和。範圍一般是 10 要求所求積性函式在 f i 已知時,f p times i p in primes,i times p in 1,n 能快速計算。首先計算 g n,j sum if i quad i是質數 或 i的最小...