2818: Gcd

首先知道

gcd(x,y) =  z

可化为

gcd(x/z,y/z) = 1;

那么令f[i] 为满足 gcd(x,y)= 1 (x,y <= i)的个数

那么答案就为 ∑ f[n/prime[i]]

观察发现 f[i] 为欧拉函数的前缀和。

那么线性筛求出欧拉函数及质数,统计一遍,搞定。

另外注意数对是存在顺序的 即 (x,y) != (y,x)  (x !=y)

c++代码如下:

 

5 + 2 =