288 字
1 分钟
Min25 筛法的原理与应用
2019-08-11

0. 定义#

P\mathbb{P} 表示质数集

1. 用途#

Min25筛是一种求积性函数f(x)f(x)的前缀和i=1Nf(i)\sum_{i=1}^{N}{f(i)}的一种方法。

2. 条件#

  1. f(n)f(n) 为积性函数 (废话)
  2. f(p)f(p)pp处为关于pp的低次多项式

3. 做法#

首先, 我们定义一个函数gk(n,m)=i=1nik[iP  or  M(i)>Pm]g_k(n, m) = \sum_{i=1}^{n}{i^k[i \in \mathbb{P}\;or\;M(i) > P_m]}

  • n<Pm2n < P_m^2gk(n,m)=gk(n,m1)g_k(n, m) = g_k(n, m - 1)
  • 否则我们要从gk(n,m)g_k(n, m)中删除M(i)=PmM(i)=P_m的合数的贡献,也就是

i=1nik[iC  and  M(i)=Pm]=Pmk(gk(nPm,m1)i=1m1Pik)\sum_{i=1}^{n}{i^k[i \in \mathbb{C}\;and\;M(i) = P_m]} =P_m^k(g_k(\lfloor\frac{n}{P_m}\rfloor, m - 1)-\sum_{i=1}^{m-1}{P_i^k})

之后,我们要计算我们的函数f(x)f(x)

我们定义h(n,m)=i=1nf(i)[M(i)Pm]h(n, m)=\sum_{i=1}^n{f(i)[M(i) \ge P_m]}

  • 先考虑质数,因为f(p)f(p) 满足第二个条件, 所以我们可以用gg函数构造出f(p)f(p)的答案。

    • 那么设f(p)=akpkf(p) = \sum{a_k*p^k}
    • 则可以得出i=mPf(Pi)[Pi<n]=akgk(n,P)i=1m1f(Pi)\sum_{i=m}^{|P|}{f(P_i)[P_i<n]} = \sum{a_k*g_k(n, |P|) - \sum_{i=1}^{m-1}{f(P_i)}}
  • 然后考虑合数

    • 枚举合数的最小质因子为PiP_i, 和最小质因子的次数为tt,
      可以将合数写为Pit×j(M(j)Pi+1,jnPit)P_i^t \times j (M(j) \ge P_{i+1}, j \le \lfloor \frac{n}{P_i^t} \rfloor)
    • 则这些合数的贡献为 f(Pit)((j=1nPitf(j)[M(j)Pi+1])+[t1])=f(Pit)(h(nPit,i+1)+[t1])f(P_i^t)((\sum_{j=1}^{\frac{n}{P_i^t}}{f(j)[M(j) \ge P_{i+1}]}) + [t \neq 1]) = f(P_i^t) (h(\lfloor \frac{n}{P_i^t} \rfloor, i + 1) + [t \neq 1])
  • 综合一下

h(n,m)=akgk(n,P)i=1m1f(Pi)+i=mPt1,Pitnf(Pit)(h(nPit,i+1)+[t1])h(n,m) =\sum{a_kg_k(n, |P|)}-\sum_{i=1}^{m-1}{f(P_i)}+\sum_{i=m}^{|P|}{\sum_{t \ge 1 , P_i^t \le n}{f(P_i^t)(h(\lfloor \frac{n}{P_i^t} \rfloor, i + 1) + [t \neq 1])}}

Min25 筛法的原理与应用
https://www.nekomio.com/posts/154/
作者
NekoMio
发布于
2019-08-11
许可协议
CC BY-NC-SA 4.0