poj3090--欧拉函数

时间:2023-03-08 19:41:20
#include<iostream>
using namespace std;
//欧拉函数
int eular(int n){
int res=,i;
for(int i=;i*i<=n;i++){
if(n%i==){
n/=i;res*=i-;
while(n%i==){
n/=i;res*=i;
}
}
}
if(n>)
res*=n-;
return res;
}
int main(){
int n,m,sum;
cin>>n;
for(int i=;i<=n;i++){
sum=;
cin>>m;
for(int j=;j<=m;j++)
sum+=eular(j)*;//除(1,1)外,其余的点都有对称点
cout<<i<<" "<<m<<" "<<sum<<endl;
}
return ;
}

此题与Poj2407相似,不过有对称点需考虑。

我们仔细观察题目会发现符合条件的点的坐标x,y都是互质的,1与1互质这是个特例,因为它是唯一一个符合没有对称点的点,需特殊考虑,此外还有(0,1),(1,0)

两点,故sum起始为3,其余加上的是欧拉函数x2