在第一象限中,从原点看,能够看到多少个点,只有在整数坐标上有点。
看图可以得出,只有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;
}
//预处理!
本文探讨了在第一象限中从原点出发可见整数坐标点的数量问题,并通过编程实现了一种预处理方法来计算特定范围内互质整数坐标点的数量。该方法通过判断坐标点是否互质(即最大公约数是否为1)来确定其是否会被其它点遮挡。
3万+

被折叠的 条评论
为什么被折叠?



