题目描述
在一个平面直角坐标系的第一象限内,如果一个点 (x,y) 与原点 (0,0) 的连线中没有通过其他任何点,则称该点在原点处是可见的。
例如,点 (4,2) 就是不可见的,因为它与原点的连线会通过点 (2,1)。
编写一个程序,计算给定整数 N 的情况下,满足 0≤x,y≤N 的可见点 (x,y) 的数量(可见点不包括原点)。
输入格式
第一行包含整数 C,表示共有 C 组测试数据。
每组测试数据占一行,包含一个整数 N。
输出格式
每组测试数据的输出占据一行。
包括测试数据的编号(从 1 开始),该组测试数据对应的 N 以及可见点的数量。
样例
输入样例:
4
2
4
5
231
输出样例:
1 2 5
2 4 13
3 5 21
4 231 32549
我们不妨思考一下什么样子的点是不可见的,就是这个点和原点的连线上还有别的点,比如点(2,4)之所以看不见是因为和原点的连线之间有个叫做(1,2)的点挡住了视线。
也就是说一个不可见的点(x1,y1)会被一个(x2,y2)的点挡住,并且x2 * k = x1; y2 * k = y1。所以一个可见的点代表他的x,y互质,这就是欧拉公式的引入点。
def phi(x):
res = x
i = 2
while i <= x//i:
if x%i == 0:
res = res//i *(i-1)
while x%i == 0:
x//=i
i+=1
if x > 1:
res = res//x *(x-1)
return res
n = int(input())
for j in range(1,n+1):
a = int(input())
con = 0
for i in range(2,a+1):
con += phi(i)
print("{:d} {:d} {:d}".format(j,a,2*con+3))