线性筛

线性筛

如果要线性筛一个函数,你需要支持这两件事:

  • 已知\(f(i)、f(j)\)\(i\)是质数且与\(j\)互质,求\(f(ij)\)
  • 已知\(f(i)、f(j)\)\(i\)是质数且整除\(j\),求\(f(ij)\)

如果\(f()\)是积性函数,那么第一件事就解决了。第二件事由于其特殊的性质,很多时候也可以轻松解决。
以下举例说明:

质数判定函数

  • \(isprime(ij)=0\)
  • \(isprime(ij)=0\)

欧拉函数

  • \(\varphi(ij)=\varphi(i)\varphi(j)\)
  • \(\varphi(ij)=i\cdot\varphi(j)\)

莫比乌斯函数

  • \(\mu(ij)=\mu(i)\mu(j)\)
    • 由于\(i\)是质数,也可以写为\(\mu(ij)=-\mu(j)\)
  • \(\mu(ij)=0\)

积性函数的狄利克雷卷积函数

求筛:\(f(n)=\sum_{d|n}d^2\mu(d)\frac{n}{d}\)\(n\le10^7\)
由狄利克雷卷积的性质,f()是积性函数。因此我们只用考虑第二件事。
\(n\)是质数,显然\(f(n)=n-n^2\)
啊啊啊哦哦哦。哈哈哈去重庆。
所以,\(f(ij)=i\cdot f(j)\)
来源BZOJ2693

埃拉托特尼斯筛

复杂度为\(O(nlog(log(n)))\),理论复杂度是线性筛的四点几倍(1e6 4.3倍,1e7 4.5倍,1e8 4.7倍),实际时间可能两三倍。

posted @ 2018-09-14 22:28  Utoрia  阅读(166)  评论(0编辑  收藏  举报