线性筛及其扩展-积性函数
Posted shjrd-dlb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性筛及其扩展-积性函数相关的知识,希望对你有一定的参考价值。
- 线性筛
- 埃氏筛
- 对于每个数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,(\(pri_k \leq x\))筛去即可。
- 证明:
- 一个数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(b)\) (a,b互质)
- \(\varphi(x)\) = x \(\prod_{i=1}^{k}\) (1-\(\frac{1}{p_i}\))
- 套用欧拉筛筛法,每个数都被自己最小质因子筛去,就有两种情况:
- 该数最小质因子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
以上是关于线性筛及其扩展-积性函数的主要内容,如果未能解决你的问题,请参考以下文章