線性篩及其擴展-積性函數
阿新 • • 發佈:2019-05-01
rac line 表示 var class 代碼 就是 最小 多次
- 線性篩
- 埃氏篩
- 對於每個數x,枚舉其倍數,將kx篩去。
- 在埃氏篩過程中,每個數都會被篩掉多次,且對於每個數x,枚舉其倍數的次數為\(\frac{n}{x}\)
- 故埃氏篩的時間復雜度為\(\sum_{i=1}^{n}\)\(\frac{n}{i}\)=n\(\sum_{i=1}^{n}\)\(\frac{1}{i}\)=\(n ln(n)\)
- 歐拉篩
- 在埃氏篩中,每個數會被篩掉多次,想要進一步下降復雜度,我們要求每個數只會被篩一次。
- 要想將多種篩去x的方法固定(唯一)。我們就要采用一種方法—“最小表示法”,套用在這裏就是每個數被自己的最小質因子篩去。
- 首先,為了優化時間復雜度,我們不難發現,並不需要對每個x,把每個x的所有倍數都篩一遍,只需要將\(pri_k\)
- 證明:
- 一個數x要被篩去,x必然是合數,x=ab,(a<b<c) ,令a為質數,當我們用b篩時,一定能夠篩去x=ab。
- 然後我們要求每個數都被自己最小質因數篩去,則當我們用b篩時,設b的最小質因子為\(pri_b\),對於\(pri_i \leq pri_b\),我們篩掉\(pri_i b\)就是被自己的最小值因數\(pri_i\)篩去。
- 埃氏篩
- 常見積性函數
- 歐拉函數(\(\varphi(x)\))
- \(\varphi(x)\)為積性函數
- \(\varphi(x)\)的兩種計算式:
- \(\varphi(x)\) = \(\varphi(a)\)
- \(\varphi(x)\) = x \(\prod_{i=1}^{k}\) (1-\(\frac{1}{p_i}\))
- \(\varphi(x)\) = \(\varphi(a)\)
- 套用歐拉篩篩法,每個數都被自己最小質因子篩去,就有兩種情況:
- 該數最小質因子pri的次數為1,即x=pri\(\sum_{i=2}^{k}pi^{ri}\)
- 直接套用積性函數的定義式\(\varphi(x)\) = \(\varphi(pri).\varphi(\) \(\frac{x}{pri})\) (pri與\(\frac{x}{pri}\)互質)
- 該數最小質因子pri的次數>1,即x= \(pri^{r_1} * \sum_{i=2}^{k} pi^{ri}\)
- 由\(\varphi(x)\)的定義式知\(\varphi(x) = x \prod_{i=1}^{k} (1- \frac{1}{pi})\)
- \(\frac{x}{pri}\)與x沒有增加額外的質因子
- 所以 \(\varphi(x) = pri * \frac{x}{pri} \prod_{i=1}^{k}(1- \frac{1}{pi})\) = \(pri *\varphi (\frac{x}{pri})\)
- 該數最小質因子pri的次數為1,即x=pri\(\sum_{i=2}^{k}pi^{ri}\)
- 代碼
- 歐拉函數(\(\varphi(x)\))
- 莫比烏斯函數\(\mu(x)\)
- \(\mu(x)\)定義式: \(\mu(x)\) = {}
- \(\mu(x)\) =\(\mu(a)\)*\(\mu(b)\) (a,b互質)
- 套用歐拉篩篩法
- 當該數最小質因子pri,次數為1,同\(\varphi(x)\), \(\mu(x)\) =\(\mu(pri)\) . $\mu( $ \(\frac{x}{pri}\))
- 當該數最小質因子pri,次數>1, \(\mu(x)\) = 0
線性篩及其擴展-積性函數