POJ-3090 Visible Lattice Points
题意:给定N,求0<=x<=N,0<=y<=N范围内,从点(0,0)到点(x,y)画一条线段,不经过任何点的点的总和.
思路:就是求小于等于N的所有欧拉函数之和乘2加1.
题目链接:http://poj.org/problem?id=3090
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cmath> 3 #include <cstdlib> 4 #include <cstring> 5 #include <string> 6 #include <algorithm> 7 #include <iostream> 8 using namespace std; 9 const int N=1010; 10 11 int phi[N],t,n; 12 13 int main(){ 14 15 // freopen("data.in","r",stdin); 16 // freopen("data.out","w",stdout); 17 18 for(int i=1;i<N;i++) phi[i]=i; 19 for(int i=2;i<N;i+=2) phi[i]/=2; 20 for(int i=3;i<N;i++) 21 if(phi[i]==i) 22 for(int j=i;j<N;j+=i) 23 phi[j]=phi[j]/i*(i-1); 24 scanf("%d",&t); 25 for(int i=1;i<=t;i++){ 26 scanf("%d",&n); 27 int sum=0; 28 for(int j=1;j<=n;j++) sum+=phi[j]; 29 printf("%d %d %d\n",i,n,sum*2+1); 30 } 31 return 0; 32 }