码迷,mamicode.com
首页 > 其他好文 > 详细

线性筛及其扩展-积性函数

时间:2019-04-30 23:47:42      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:代码   固定   欧拉   枚举   过程   直接   额外   复杂   函数   

  • 线性筛
    • 埃氏筛
      • 对于每个数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})\)
    • 代码
  • 莫比乌斯函数\(\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

线性筛及其扩展-积性函数

标签:代码   固定   欧拉   枚举   过程   直接   额外   复杂   函数   

原文地址:https://www.cnblogs.com/shjrd-dlb/p/10798239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!