poj 2407
欧拉函数。
代码:
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
int a[40001];
long long n,m;
void read(){
// ifstream cin("in.txt");
int i,j,k;
long long ans;
for(i=4;i<=40000;i+=2)
a[i]=1;
for(i=3;i<=40000;i+=2)
if(a[i]==0)
{
for(j=2*i;j<=40000;j+=i)
a[j]=1;
}
while(cin>>n){
if(n==0) return ;
if(n==1)
{
cout<<0<<endl;
continue;
}
ans=1;m=n;
for(i=2;i<=n&&i*i<=m;i++)
if(a[i]==0&&n%i==0)
{
j=0;
while(n%i==0)
{
n/=i;
j++;
}
ans*=pow(1.*i,j-1)*(i-1);
}
if(n>1) ans*=n-1;
cout<<ans<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号