题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1695
题目大意:求[1..b]中的x和[1..d]中的y有多少gcd(x,y) = k.
思路:
预备知识:
容斥原理求数区间[1..r]中与n互质的数的个数. Here
要求gcd(x,y) = k,则等价于求 gcd(x/k,y/k) = 1.所以问题转化成求[1..b/k]和[1..d/k]中有多少对gcd(x,y) = 1.
又因为此题要求gcd(1,3)和gcd(3,1)算一个,所以我们不妨按x < y来求.
接下来,我们枚举x的值,然后便转化为求[x..d/k]区间中与x互质的数的个数,用容斥原理解决.
[x..d/k] = [1..d/k] - [1..x-1],[1..d/k]我们用上面的容斥原理方法就可以解决,[1..x-1]虽然也可以用容斥,但速度较慢,明显可以用更快的欧拉函数做。
#include
#include
#include
#include
#include
#include
#include
#include
#include