min_25筛

min_25筛

设有积性函数 f ( x ) f(x) f(x),满足 f ( P i ) f(P_i) f(Pi)是多项式,且能够快速计算出 f ( P i k ) f(P_i^k) f(Pik)。求其前缀和。

一个函数

m i n p ( x ) minp(x) minp(x)表示 x x x的最小质因子。令 P P P为质数集,其中第 1 1 1个元素为 2 2 2。设 g ( n , j ) = ∑ i = 1 n f ( i ) [ i ∈ P ∨ m i n p ( i ) > P j ] g(n,j)=\sum_{i=1}^nf(i)[i\in P\lor minp(i)>P_j] g(n,j)=i=1nf(i)[iPminp(i)>Pj]

考虑从 g ( n , j − 1 ) g(n,j-1) g(n,j1)推到 g ( n , j ) g(n,j) g(n,j)。这个过程相当于删去那些最小质因数为 P j P_j Pj的合数。也就是说,这些数除以 P j P_j Pj后的最小质因数还是大于 P j − 1 P_{j-1} Pj1的。那要删去的数的答案就是 f ( P j ) ⋅ g ( n P j , j − 1 ) f(P_j)\cdot g(\frac{n}{P_j},j-1) f(Pj)g(Pjn,j1)吗?发现这时还多删了除以 P j P_j Pj后比 P j P_j Pj小的质数的答案,因此把这部分补回去。则转移就是 g ( n , j ) = g ( n , j − 1 ) − f ( P j ) ⋅ [ g ( n P j , j − 1 ) − g ( P j − 1 , j − 1 ) ] g(n,j)=g(n,j-1)-f(P_j)\cdot [g(\frac{n}{P_j},j-1)-g(P_j-1,j-1)] g(n,j)=g(n,j1)f(Pj)[g(Pjn,j1)g(Pj1,j1)]
这个是没有特判各种情况时的转移。首先,若 P j 2 > n P_j^2>n Pj2>n,则显然这次什么也删不了,即 g ( n , j ) = g ( n , j − 1 ) g(n,j)=g(n,j-1) g(n,j)=g(n,j1)。另外还有边界,即 g ( P j , j ) = ∑ i = 1 j f ( P j ) g(P_j,j)=\sum_{i=1}^jf(P_j) g(Pj,j)=i=1jf(Pj)

如果我们要计算 g ( n , m ) g(n,m) g(n,m),则我们只需要对 n \sqrt n n 内的质数计算即可。该部分的复杂度为 O ( n 3 4 log ⁡ n ) O(\frac{n^{\frac{3}{4}}}{\log n}) O(lognn43)

另一个函数

S ( n , j ) = ∑ i = 1 n f ( i ) [ m i n p ( i ) ≥ P j ] S(n,j)=\sum_{i=1}^nf(i)[minp(i)\ge P_j] S(n,j)=i=1nf(i)[minp(i)Pj]。则 f f f的前缀和就是 S ( n , 1 ) + f ( 1 ) S(n,1)+f(1) S(n,1)+f(1)

先预处理要求范围内的 g g g。考虑如何转移 S S S,将答案为质数的答案和合数的答案,其中质数直接计算,合数递归计算。质数的答案可以由 g g g算出,是 g ( n , j ) − ∑ i = 1 j − 1 f ( P i ) g(n,j)-\sum_{i=1}^{j-1}f(P_i) g(n,j)i=1j1f(Pi)。对于合数,枚举其最小质因子及其出现次数。转移为 S ( n , j ) = g ( n , j ) − ∑ i = 1 j − 1 f ( P i ) + ∑ k = j P k 2 ≤ n ∑ l = 1 P k l + 1 ≤ n f ( P k l ) ⋅ S ( n P k l , k + 1 ) + f ( P k l + 1 ) S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\le n}\sum_{l=1}^{P_k^{l+1}\le n}f(P_k^l)\cdot S(\frac{n}{P_k^l},k+1)+f(P_k^{l+1}) S(n,j)=g(n,j)i=1j1f(Pi)+k=jPk2nl=1Pkl+1nf(Pkl)S(Pkln,k+1)+f(Pkl+1)
总复杂度为 O ( n 3 4 log ⁡ n ) O(\frac{n^{\frac{3}{4}}}{\log n}) O(lognn43)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值