选数

法一:数论容斥

注意一个很重要的结论:对任意一个区间[L,R],从中选出两个及以上的数并求gcd,那么结果不可能大于RL,用更相减损术证明就好了(所以使用数论容斥的时候一定要把上界估明白)

于是我们现在只用知道105内的每个数在区间[L,R]中有多少个数是其倍数

模仿倍数法求倍数,我们枚举105内的所有数,假设当前枚举i,那么其上下界分别为Lii,Hii,于是可以O(1)算出我们要求的量,时间复杂度为O(RL)

然后就可以数论容斥了

我们不难发现一个倍数法的拓展,此时我们仍然可以在O(RL+RL2+...+RLR)的时间复杂度内求出[L,R]的所有数的约数:对于[L,R]内的合数x,其成对的约数中一定有一个数不超过R,设这个约数为i,另一个约数就为xi;对于[L,R]内的质数,最后扫一遍[L,R]判断就好了

法二:莫比乌斯反演

反演完了之后题解一般用的杜教筛,但其实这篇文章的方法可以学

posted @   最爱丁珰  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示