#include<iostream> using namespace std; //欧拉函数 int eular(int n){ int res=1,i; for(int i=2;i*i<=n;i++){ if(n%i==0){ n/=i;res*=i-1; while(n%i==0){ n/=i;res*=i; } } } if(n>1) res*=n-1; return res; } int main(){ int n,m,sum; cin>>n; for(int i=1;i<=n;i++){ sum=3; cin>>m; for(int j=2;j<=m;j++) sum+=eular(j)*2;//除(1,1)外,其余的点都有对称点 cout<<i<<" "<<m<<" "<<sum<<endl; } return 0; }
此题与Poj2407相似,不过有对称点需考虑。
我们仔细观察题目会发现符合条件的点的坐标x,y都是互质的,1与1互质这是个特例,因为它是唯一一个符合没有对称点的点,需特殊考虑,此外还有(0,1),(1,0)
两点,故sum起始为3,其余加上的是欧拉函数x2