从yyb这里学的min25
想了好久为什么边界函数要看成全是质数的情况。其实边界函数就是真 · 前缀和。
因为 min25筛的函数必须是 f ( x ) = x k \mathbf{f(x)=x^k} f(x)=xk
性质1: f ( x ) = x k \mathbf{f(x)=x^k} f(x)=xk 为积性函数
性质2: f ( x ) \mathbf{f(x)} f(x) 的真 · 前缀和很好求
比如
f ( x ) = ∑ x = 1 n x 0 = n \mathbf{f(x)=}\sum_{x=1}^n x^0=n f(x)=∑x=1nx0=n
f ( x ) = ∑ x = 1 n x 1 = n ( n + 1 ) 2 \mathbf{f(x)=}\sum_{x=1}^n x^1 =\frac{n(n+1)}{2} f(x)=∑x=1nx1=2n(n+1)
f ( x ) = ∑ x = 1 n x 2 = n ( n + 1 ) ( 2 n + 1 ) 6 \mathbf{f(x)=}\sum_{x=1}^n x^2=\frac{n(n+1)(2n+1)}{6} f(x)=∑x=1nx2=6n(n+1)(2n+1)
f ( x ) = ∑ x = 1 n x 3 = n 2 ( n + 1 ) 2 4 \mathbf{f(x)=}\sum_{x=1}^n x^3=\frac{n^2(n+1)^2}{4} f(x)=∑x=1nx3=4n2(n+1)2
反正
最后只要能算出 ∑ i = 1 n [ i 是 质 数 ] x k \sum_{i=1}^n[i是质数]x^k i=1∑n[i是质数]xk 就行啦
就是后文说到的g(x,|p|),只是一种意思的不同表示而已
假设我们要算 F ( x ) 的 前 缀 和 F(x)的前缀和 F(x)的前缀和
设 f ( x ) = x k , F ( x ) = a 0 f 0 ( x ) + a 1 f 1 ( x ) + a 2 f 2 ( x ) + . . . + a m f m ( x ) 设f(x)=x^k,F(x)=a_0f_0(x)+a_1f_1(x)+a_2f_2(x)+... +a_mf_m(x) 设f(x)=xk,F(x)=a0f0(x)+a1f1(x)+a2f2(x)+...+amfm(x)
S ( x ) 为 F ( x ) 的 前 缀 和 , S ( x ) = ∑ i = 1 n F ( i ) S(x)为F(x)的前缀和,S(x)=\sum_{i=1}^nF(i) S(x)为F(x)的前缀和,S(x)=∑i=1nF(i)
g ( x , ∣ p ∣ ) 为 f 的 质 数 前 缀 和 , g ( x , ∣ p ∣ ) = ∑ i = 1 n [ i ∈ P r i m e ] f ( i ) g(x,|p|)为f的\pmb{质数}前缀和,g(x,|p|)=\sum_{i=1}^n[i\in Prime]f(i) g(x,∣p∣)为f的质数质数质数前缀和,g(x,∣p∣)=∑i=1n[i∈Prime]f(i),至于如何筛,网上都是
G ( x ) 为 F ( x ) 的 质 数 前 缀 和 , G ( x ) = a 0 g 0 ( x , ∣ p ∣ ) + a 1 g 1 ( x , ∣ p ∣ ) + a 2 g 2 ( x , ∣ p ∣ ) + . . . + a m g m ( x , ∣ p ∣ ) G(x)为F(x)的\pmb{质数}前缀和,G(x)=a_0g_0(x,|p|)+a_1g_1(x,|p|)+a_2g_2(x,|p|)+... +a_mg_m(x,|p|) G(x)为F(x)的质数质数质数前缀和,G(x)=a0g0(x,∣p∣)+a1g1(x,∣p∣)+a2g2(x,∣p∣)+...+amgm(x,∣p∣)
这里为了方便起见,再设 h ( x ) = ∑ i = 1 x f ( P i ) h(x)=\sum_{i=1}^{x}f(P_i) h(x)=∑i=1xf(Pi),在初始化的时候,即欧拉线筛的时候顺便求好
以及 H ( x ) = a 0 h 0 ( x ) + a 1 h 1 ( x ) + a 2 g 2 ( x ) + . . . + a m g m ( x ) H(x)=a_0h_0(x)+a_1h_1(x)+a_2g_2(x)+... +a_mg_m(x) H(x)=a0h0(x)+a1h1(x)+a2g2(x)+...+amgm(x)
首先线筛出 n \sqrt n n 以内的质数,顺便求 h ( x ) h(x) h(x) 和 H ( x ) H(x) H(x),然后整除分块求id
接着算 g ( n , ∣ p ∣ ) \mathbf{ g(n,|p|)} g(n,∣p∣),即筛好的前置函数,合起来就可以算出 G ( x ) \mathbf{G(x)} G(x),即 F ( x ) \mathbf{F(x)} F(x)的质数前缀和,继而筛(补)出 S ( x ) \mathbf{S(x)} S(x)
g ( n , j ) = { g ( n , j − 1 ) P j 2 > n g ( n , j − 1 ) − P j k [ g ( n P j , j − 1 ) − h ( j − 1 ) ] P j 2 ≤ n g(n,j)= \begin{cases} g(n,j-1)&P_j^2\gt n\\ g(n,j-1)-P_{j}^k[g(\frac{n}{P_j},j-1)-h(j-1)]&P_j^2\le n \end{cases} g(n,j)={g(n,j−1)g(n,j−1)−Pjk[g(Pjn,j−1)−h(j−1)]Pj2>nPj2≤n
然后只需要用到 g ( n , ∣ p ∣ ) g(n,|p|) g(n,∣p∣)
G ( n ) = a 0 g 0 ( n , ∣ p ∣ ) + a 1 g 1 ( n , ∣ p ∣ ) + a 2 g 2 ( n , ∣ p ∣ ) + . . . + a m g m ( n , ∣ p ∣ ) G(n)=a_0g_0(n,|p|)+a_1g_1(n,|p|)+a_2g_2(n,|p|)+... +a_mg_m(n,|p|) G(n)=a0g0(n,∣p∣)+a1g1(n,∣p∣)+a2g2(n,∣p∣)+...+amgm(n,∣p∣)
然后利用 G ( n ) G(n) G(n)与 H ( x ) H(x) H(x),以及可以快速求的 F ( p k ) F(p^k) F(pk)
S ( n , j ) = G ( n ) − H ( j − 1 ) + ∑ k = j P k 2 ≤ n ∑ i = 1 P k i + 1 ≤ n ( S ( n P k i , k + 1 ) × F ( P k i ) + F ( P k i + 1 ) ) S(n,j)=G(n)- H(j-1)+\sum_{k=j}^{P_k^2\le n}\sum_{i=1}^{P_k^{i+1}\le n}\biggl(S(\frac{n}{P_k^i},k+1)\times F(P_k^i)+F(P_k^{i+1})\biggr) S(n,j)=G(n)−H(j−1)+k=j∑Pk2≤ni=1∑Pki+1≤n(S(Pkin,k+1)×F(Pki)+F(Pki+1))
然后 S ( n , 1 ) S(n,1) S(n,1) 就是 ∑ i = 2 n F ( x ) \sum_{i=2}^{n}F(x) ∑i=2nF(x)啦,所以 S ( n , 1 ) + F ( 1 ) S(n,1)+F(1) S(n,1)+F(1)就是所求答案了呀!!!
F(1)的值无所谓反正最后加
反正只要满足如下条件就可使用:
1. F ( p ) 可 以 用 简 单 多 项 式 表 示 , p ∈ p r i m e 2. F ( p k ) 可 以 快 速 求 出 , p ∈ p r i m e 3. F ( a b ) = F ( a ) F ( b ) 满 足 a , b ∈ p r i m e 1.F(p)可以用简单多项式表示,p\in prime \\ 2.F(p^k)可以快速求出,p\in prime \\ 3.F(ab)=F(a)F(b)满足a,b\in prime 1.F(p)可以用简单多项式表示,p∈prime2.F(pk)可以快速求出,p∈prime3.F(ab)=F(a)F(b)满足a,b∈prime
反正min25超超超优秀啊,什么形如 ∑ i = 1 n i k 1 ϕ ( i k 2 ) μ ( i k 3 ) \sum_{i=1}^{n} i^{k_1}\phi(i^{k_2})\mu(i^{k_3}) ∑i=1nik1ϕ(ik2)μ(ik3),都直接秒杀好不好!!!
显 然 F ( p ) = ( − 1 ) k 3 p k 1 + k 2 − 1 ( p − 1 ) 显然F(p)=(-1)^{k_3}p^{k_1+k_2-1}(p-1) 显然F(p)=(−1)k3pk1+k2−1(p−1)
F ( p k ) = ( − 1 ) k k 3 p k ( k 1 + k 2 ) − 1 ( p − 1 ) F(p^k)=(-1)^{kk_3}p^{k(k_1+k_2)-1}(p-1) F(pk)=(−1)kk3pk(k1+k2)−1(p−1)
而且 d ( x ) , μ ( x ) , ϕ ( x ) d(x),\mu(x),\phi(x) d(x),μ(x),ϕ(x)都是积性函数,那么乘积也满足第三条,就可以用min25筛
但是记得幂次不能太大,6次及以上自然数幂和要套公式,复杂度就起来了,而且我也不会,嘿嘿
再补充两个:
f ( x ) = ∑ x = 1 n x 4 = n ( n + 1 ) ( 6 n 3 + 9 n 2 + n − 1 ) 30 \mathbf{f(x)=}\sum_{x=1}^n x^4=\frac{n(n+1)(6n^3+9n^2+n-1)}{30} f(x)=x=1∑nx4=30n(n+1)(6n3+9n2+n−1)
f ( x ) = ∑ x = 1 n x 5 = n 2 ( n + 1 ) ( 2 n 3 + 4 n 2 + n − 1 ) 12 \mathbf{f(x)=}\sum_{x=1}^n x^5=\frac{n^2(n+1)(2n^3+4n^2+n-1)}{12} f(x)=x=1∑nx5=12n2(n+1)(2n3+4n2+n−1)