POJ 3090 Visible Lattice Points
题意:
输入范围n,在原点能看见n*n范围内多少个不被挡住的点。
题解:
由题意(ka,kb)会被(a,b)挡住,所以要求n*n内互质的点。
#include<cstdio>
using namespace std;
const int N=1000;
int s[N+5];
int main()
{
int T,n,cnt=0;
for(int i=1;i<=N;i++)s[i]=i;
for(int i=2;i<=N;i++){
if(s[i]==i)for(int j=i;j<=N;j+=i){
s[j]=s[j]/i*(i-1);
}
s[i]=s[i]*2+s[i-1];
}
scanf("%d",&T);
while(T--){
int ans=0;
scanf("%d",&n);
printf("%d %d %d\n",++cnt,n,s[n]+2);
}
}
k