莫比乌斯反演

大佬的莫比乌斯函数定义及证明:https://www.cnblogs.com/qdscwyy/p/8012843.html

推荐题目:HDU1695 GCD【容斥原理】【欧拉函数】

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1695

题目大意:

给你5个整数a、b、c、d、k,在区间[a,b]中选一个数x,在区间[c,d]中选一个数y,使得x和y的

公约数为k,即gcd(x,y) = k。现在问题来了:这样的整数对共有多少对。

 

思路:

题目假定a = c = 1,那么区间就变为了[1,b]和[1,d]。求gcd(x,y) = k,其实可以将区间端点除以

k,得到[1,b/k]和[1,d/k]。问题就变为了[1,b/k]和[1,d/k]中共有多少互素的整数对。

由于b可能大于d,为了方便,我们令d > b,不满足则交换d和b。

我们可以固定较小的区间[1,b/k], 用i遍历另一个区间[1,d/k]。

当i <= b/k时,可以很容易看出,求i与[1,b/k]中互质的数的对数就是求i的欧拉函数,累加起来就是结果。

当i > b/k时,就变为了和HDU4135、HDU2841类似的问题,用容斥定理来求。

 

 

你可能感兴趣的:(日常编程)