min25筛中g函数的必要性

前置知识: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的所有质数,时间复杂度和空间复杂度都很大。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值