选数

法一:数论容斥

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

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

模仿倍数法求倍数,我们枚举\(10^5\)内的所有数,假设当前枚举\(i\),那么其上下界分别为\(\lceil\frac{L}{i}\rceil\cdot i,\lfloor\frac{H}{i}\rfloor\cdot i\),于是可以\(O(1)\)算出我们要求的量,时间复杂度为\(O(R-L)\)

然后就可以数论容斥了

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

法二:莫比乌斯反演

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

posted @ 2024-05-06 18:42  最爱丁珰  阅读(47)  评论(0)    收藏  举报