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;
}

posted on 2011-03-31 09:55  宇宙吾心  阅读(296)  评论(0)    收藏  举报

导航