在第一象限中,从原点看,能够看到多少个点,只有在整数坐标上有点。
看图可以得出,只有2个坐标互质,才能被看到,如果不互质,即gcd!=1,则一定会被挡住。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
bool vis[1111][1111]; int ans[1111];
int main(){
int t;
for(int i=0;i<=1000;i++)
{
for(int j=0;j<=1000;j++)
{
if(i==0&&j==0)continue;
if(vis[i][j]==0)
{
int x=i*2,y=j*2;
while(x<=1000&&y<=1000)
{
vis[x][y]=1;
x+=i;
y+=j;
}
}
}
}
ans[1]=3;
for(int i=2;i<=1000;i++)
{
int t=0;
for(int j=0;j<=i;j++)
{
if(vis[i][j]==0)t++;
if(vis[j][i]==0)t++;
}
ans[i]=t+ans[i-1];
}
cin>>t;
int cs=1;
while(t--)
{
int n;
scanf("%d",&n);
int i,j;
printf("%d %d ",cs++,n);
printf("%d\n",ans[n]);
}
return 0;
}
//预处理!