Min25筛
Posted leukocyte
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Min25筛相关的知识,希望对你有一定的参考价值。
顾名思义,这是(min25dalao)发明的算法,可以用来处理一些积性函数求和的问题。
- 用途
我们现在有一个积性函数(F(x)),要我们快速计算前缀和,即求
[sum_{i=1}^{n} F(i)
]
-
前置知识
数论函数基本性质,比较基础就不说了... -
使用前提
(1.forall p in prime F(p))是一个低阶多项式
(2.forall p in prime,k in N_+ F(p^k))可以快速求出
(条件说实话还是比较严苛的...) -
解决问题
我们明确了一些大前提,那么到底该怎么实现呢?
首先将和式拆开,即分成
[sum_{p in prime} F(p) + sum_{i
otin prime} F(i)
]
先考虑前半部分,也就是所有质数上的值。
- (step 1) 求解质数
考虑构造一个完全积性函数(F‘(x)),使得(forall p in prime,F‘(p)=F(p))
那么我们只要求出(F‘(x))在所有质数上的值即可
这里我们运用(DP)的思想,设
[g(n,m)=sum_{i=1}^{n} F‘(i)[i in prime | minp(i)>p_m]
]
那么可以得到转移
[g(n,m)=egin{cases}
g(n,m-1)&p_m>sqrt{n}g(n,m-1)-F‘(p_m)[g(frac{n}{p_m},m-1)-g(p_m-1,m-1)]&p_m<=sqrt{n}
end{cases}
]
我们设(k = max){(k|p_k<=sqrt{n})}
则答案显然为(g(n,k))
这样前半部分就结束了,我们接下来考虑求解整个函数。
- (step 2) 求解答案
我们可以考虑和求质数的值一样的方法,设
[S(n,m)=sum_{i=1}^{n}F(i)[minp(i)>p_m]
]
那么可以得到转移
[S(n,m)=g(n,k)-sum_{i=1}^{m-1}F(p_i)+sum_{i>m} sum_{e} F(p_i^e)(S(frac{n}{p_i^e},i)+[e>1])
]
这样我们就做完了。
-
参考资料
以上是关于Min25筛的主要内容,如果未能解决你的问题,请参考以下文章