[學習筆記]杜教篩法的原理
一、引入
通常,在莫比烏斯反演的題目中會推出下面這樣的式子:
i=1∑n⌊in⌋f(i)
其中 f 是積性函式。
我們知道,當 1≤i≤n 時 ⌊in⌋ 的取值只有 O(n) 種。
於是我們可以對下界分塊,利用 f 的字首和求解,從而實現一次 O(n) 的複雜度。
但如果 n=109 時,如何求 f 的字首和呢?
下面就來介紹求積性函式字首和
二、前置芝士:狄利克雷 (Dirichlet) 卷積
兩個數論函式函式 f 和 g 的狄利克雷卷積定義為:
(f∗g)(n)d∣n∑f(d)g(dn)
如果 f 和 g 為積性函式,那麼 f∗g 也是積性函式。
三、演算法流程
設我們要求的值:
S(n)=i=1∑nf(i)
首先找到一個積性函式 g ,使得
h(n)=i=1∑n(f∗g)(i)
可以被 O(1) 計算出, g(n) 的值及字首和也能被 O(1) 計算出。
於是有:
i=1∑nd∣i∑f(di)g(d)=h(n)
把列舉約數改成列舉倍數:
d=1∑ng(d)1≤i≤n,d∣i∑f(d
滿足所有 1≤i≤n,d∣i 的 di 實際上就是所有滿足 1≤i≤⌊dn⌋ 的 i :
i=1∑ng(i)j=1∑⌊in⌋f(j)=h(n)
於是:
i=1∑ng(i)S(⌊in⌋)=h(n)
由於 ⌊1n⌋=n ,故:
g(1)S(n)=h(n)−i=2∑ng(i)S(⌊in⌋)
對 ⌊in⌋ 下界分塊。使用記憶化搜尋就能在 O(n43) 內求出一個字首和。
為了提高效率,我們還需要結合線性篩,篩出 n32 內的所有 S 值。
這樣,我們實現了 O(n32) 求 S(n) 。
四、複雜度分析
求 S(n) 時由於使用了記憶化,所以會遞迴到的值 x 一定是 ⌊in⌋ 的取值(最多 O(n) 種)。
所以複雜度(不結合線性篩的情況下):
i=1∑ni+i=1∑nin
=∫0n(x+xn)dx=O(n43)
如果結合了線性篩,那麼能遞迴到的 x 至少 n32 ,
複雜度降到:
i=1∑n31in=∫0n31xndx=O(n32)
五、有趣的栗子
來源: BZOJ 3944
一、引入
通常,在莫比烏斯反演的題目中會推出下面這樣的式子:
∑i=1n⌊ni⌋f(i)\sum_{i=1}^n\lfloor\frac ni\rfloor f(i)i=1∑n⌊in⌋f(i)
其中 fff 是積性函式。
我們知道,當 1≤i≤n1\le i mit 記憶 text 快速查找 floor 相等 sqrt limit 原因 幾十天前學的這玩意吧...比Min_25篩好理解多了...
式子挺容易推的, 放在這裏以備快速查找吧
設我們要計算的是 $S(n)=\sum\limits_{k=1}^nf(k)$, 其中 函數 list gym 前綴 形式 公式 tar png 構造 入門好博客:
杜教篩 - pengym - 博客園
求一些方便構造卷積形式的積性函數的前綴和(不是積性函數如果可以變成卷積形式也可以做)
構造h=f*g,然後推h的前綴和,就可以把f前綴和遞歸處理
求解 init 了解 define esp spa warning 它的 prime 好久沒寫數論題,今天在51nod抓了一道,發現自己早就把杜教篩忘得一幹二凈啦~ 所以今天我把杜教篩學習筆記整理一下,防止以後再次忘記 =v=
[Warning] 杜教篩復雜度證明我暫時還不
前置知識:一些數論函式,比如尤拉函式、莫比烏斯函式的一些性質,積性函式及性質,整除分塊。 這裡預設大家會前置知識,如果不會請自行學習。
之前嘗試看過,結果後來都忘光了,於是還是決定應該寫個學習筆記記錄一下。
首先開始介紹莫比烏斯反演。 我們設
sso span 形式 dig queue fontsize 只需要 tps tro QwQ一個不會莫比烏斯反演的蒟蒻來寫杜教篩的博客了
這個是杜教篩的一般形式
中間那個先枚舉幾倍,實際上相當於把令\(i=k*d\) 然後進行k和d枚舉
這麽空說怎麽好理解
我們來引入兩
定義
在數論中,對正整數n,尤拉函式是小於等於n的數中與n互質的數的數目。並且用符號φ(n)表示一個整數的尤拉函式。例如φ(8)=4。特殊的φ(1)=1。
一些尤拉函式的性質
性質一
對於一個質數n,φ(n)=n−1。
證明:
因為n是質數。 空間 ^c turn 感覺 rac blog 預處理 查詢 前綴 杜教篩瞎推【學習筆記】
〇、前言
對於 bzoj3944 來說,和莫比烏斯反演等其他知識關系不大,但是 \(\mu\) 函數在自變量較大情況下的前綴和在反演題中也是會被用到的。
接下來通過 bzoj3944
埃氏篩法
這個篩法是最樸素的篩法了,可以在
O(nloglogn)
O
(
n
l
o sizeof desc sta name check const sub bmi discus
3944: Sum
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3471 Solved: 946[Submit][St 前綴 con bre sca else rac poj class algo Part 1:杜教篩進階在了解了杜教篩基本應用,如$\sum_{i=1}^n\varphi(i)$的求法後,我們看一些杜教篩較難的應用。求$\sum_{i=1}^n\varphi(i)*i$考慮把 wid eight 前綴 .html != brush name load ans 題目描述
去年的Lucas非常喜歡數論題,但是一年以後的Lucas卻不那麽喜歡了。
在整理以前的試題時,發現了這樣一道題目“求Sigma(f(i)),其中1<=i< width pri define second pair ring 空格 string pll 【BZOJ3944】Sum
Description
Input
一共T+1行
第1行為數據組數T(T<=10)
第2~T+1行每行一個非負整數N,代表一組 優化問題 坐標 出了 變量 addclass fun ber 找到 線性
這篇博客主要解說了Ng的課第六、七個視頻,涉及到的內容包含,函數間隔和幾何間隔、最優間隔分類器 ( Optimal Margin
Classifier)、原始/對偶問題 ( Pr while bdc bubble == append 算法 ef7 -a += 1.二分查找
只能用二分查找查找有序列表
def bin_search(data,val): #data為被查找的列表,val是要查找的值
low = 0
high = l amp short last ++ esc output sig blog tro Description
去年的Lucas非常喜歡數論題,但是一年以後的Lucas卻不那麽喜歡了。
在整理以前的試題時,發現了這樣一道題目“求Sigma(f(i)),其中1&l pos cnblogs title tar sdn aid www. article 前綴
狄利克雷卷積和莫比烏斯反演:鏈接
淺談一類積性函數的前綴和: 鏈接
賈誌鵬線性篩: 鏈接
讀賈誌鵬線性篩有感 (莫比烏斯函數的應用)
莫比烏斯函數
狄利 eating 元組 切片 文件 維度 mage python str eric 1.numpy中一些函數的用法學習
shape()用法:
shape : tuple of ints
The elements of the shape tuple give the le i++ define hint .net width long .com cas string
4176: Lucas的數論
Time Limit: 30 Sec Memory Limit: 256 MB
Description
去年的Lucas非常喜歡數論 pac pan using 函數 莫比烏斯函數 right for body ace 居然扒到了學長出的題
和3944差不多(?),雖然一眼看上去很可怕但是仔細觀察發現,對於mu來講,答案永遠是1(對於帶平方的,mu值為0,1除外),然後根據歐拉篩的原理,\( \sum_{
https://www.lydsy.com/JudgeOnline/problem.php?id=3944
(1)求 ∑i=1nμ(i) 。
我們知道, μ∗1=e ( e 為單位元,即 [n=1] )
於是:
i=1∑nμ(i)=1−i=2∑nj=1∑⌊
相關推薦
[學習筆記]杜教篩法的原理
[學習筆記] 杜教篩
[學習筆記]杜教篩
胡小兔的杜教篩學習筆記
莫比烏斯反演 狄利克雷卷積 杜教篩 學習筆記
杜教篩學習筆記
數論學習筆記 尤拉函式 (一些性質和運用)內建杜教篩
杜教篩瞎推 學習筆記【杜教篩】【數學】
埃氏篩法+線性篩法+杜教篩+min25篩總結
3944: Sum[杜教篩]
杜教篩進階+洲閣篩講解+SPOJ divcnt3
【bzoj4176】Lucas的數論 莫比烏斯反演+杜教篩
【BZOJ3944/4805】Sum/歐拉函數求和 杜教篩
Andrew Ng機器學習筆記+Weka相關算法實現(四)SVM和原始對偶問題
Python學習筆記19(算法)
【bzoj 4176】 Lucas的數論 莫比烏斯反演(杜教篩)
狄利克雷卷積&&杜教篩&&莫比烏斯反演
《機器學習實戰》學習筆記——k近鄰算法
bzoj 4176: Lucas的數論 -- 杜教篩,莫比烏斯反演
bzoj 4916: 神犇和蒟蒻【歐拉函數+莫比烏斯函數+杜教篩】