筛法是一个很方便,很快捷的方法,金典的算法很多都是使用晒法来解决的。比如金典的求欧拉函数,求莫比乌斯函数,。以及一些筛素数等。但是什么类型的题目可以使用自己自创的筛法呢。
1.最典型的函数类型
F(x)=∑d|xG(x,d)
这种类型的函数是金典的筛法使用。你可以这样想,筛法的本质是枚举每个数的同时找到这个数对其他需要这个数的贡献。其实也是一个贡献的思想,但是注意一点,必须要可以使用某种枚举方法使得x可以更新所有比他大的需要更新的值。但是对于上述的函数,只要枚举x的时候,内层循环枚举x的倍数。这样就可以得到x对内层y的共享,加到F(y)上就可以了。其中枚举的外层i为d,内层j为x,就可以算出x了。金典的贡献思想,并且使用这个可以解决很多的题目。
2.可能上面的不是金典类型。但是还有一种也就可以使用筛法。那就是积性函数的求解。
F(x)
如果是积性函数,也可以使用筛法。所以如果简单方法TLE吗,可以考虑内层循环是否是积性函数。其中使用线性晒法是最简单的。因为线性筛就是求的是合数分解为最小的素数和合数的乘积。利用
F(x)=F(p1)∗F(p2)....F(pk)
可以通过素数更新,但是注意某些函数满足部分积性。比如只有xy互素才可以满足积性。这样就要特判了。
目前只发现了这两个,持续更新中。
在数论中使用筛法
最新推荐文章于 2025-04-17 11:42:57 发布