min25筛中g函数的必要性

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前置知识min25筛学习

在学习min25筛之后我们知道有 S S S函数的递推式

S ( n , i ) = g ( n , ∣ p r ( n ) ∣ ) − g ( p r i , ∣ p r ( n ) ∣ ) + ∑ j > i ∑ p r j k ≤ n f ( p r j k ) × ( S ( ⌊ n p r j k ⌋ , j ) + [ k > 1 ] ) S(n,i)=g(n,|pr(n)|)-g(pr_i,|pr(n)|)+\sum\limits_{j>i}\sum\limits_{pr_j^k\leq n}f(pr_j^k)\times (S(\lfloor\dfrac{n}{pr_j^k}\rfloor,j)+[k>1]) S(n,i)=g(n,pr(n))g(pri,pr(n))+j>iprjknf(prjk)×(S(⌊prjkn,j)+[k>1])

其中 g ( n , ∣ p r ( n ) ∣ ) − g ( p r i , ∣ p r ( n ) ∣ ) g(n,|pr(n)|)-g(pr_i,|pr(n)|) g(n,pr(n))g(pri,pr(n))表示 n n n以内大于 p r i pr_i pri的质数的 f f f值之和。后面相当于求 n n n以内不是质数的最小质因子大于 p r i pr_i pri的数的 f f f值之和。当 k = 1 k=1 k=1 f ( p r j ) f(pr_j) f(prj)在前面已经被计算过了所以不用加1当 k > 1 k>1 k>1 p r j k pr_j^k prjk不是质数所以要加上。

那我们想想如果改为以下式子那么 g g g函数是不是就不用求了呢

S ( n , i ) = ∑ j > i ∑ p r j k ≤ n f ( p r j k ) × ( S ( ⌊ n p r j k ⌋ , j ) + 1 ) S(n,i)=\sum\limits_{j>i}\sum\limits_{pr_j^k\leq n}f(pr_j^k)\times (S(\lfloor\dfrac{n}{pr_j^k}\rfloor,j)+1) S(n,i)=j>iprjknf(prjk)×(S(⌊prjkn,j)+1)

修改后意义不变此时不需要 g g g函数 S S S的值仍能正确求出那我们是否可以用这个递推式来求 S S S

这是不行的。注意当 + [ k > 1 ] +[k>1] +[k>1]变为 + 1 +1 +1时若 k = 1 k=1 k=1 p r j 2 > n pr_j^2>n prj2>n p r j pr_j prj也有贡献这就要求我们求出 n n n以内的所有质数。一般的 n n n都是 1 0 9 10^9 109以上的级别的这显然是不可行的。

其实设置 g g g函数的意义就是求 f f f在大质数处的值所以 g g g函数不能省去。上述的 S S S的递推式虽然正确但是如果要实现的话需要求出并存储 1 1 1 n n n的所有质数时间复杂度和空间复杂度都很大。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6