poj 2480

有意思的欧拉。注意精度。

代码:

#include<iostream>
#include<fstream>

using namespace std;

int a[50001];
long long n;

void read(){
//	ifstream cin("in.txt");
	long long i,j,k;
	for(i=4;i<=50000;i+=2)
		a[i]=1;
	for(i=3;i<=50000;i+=2)
		if(a[i]==0)
			for(j=2*i;j<=50000;j+=i)
				a[j]=1;
	while(cin>>n){
		double ans=n;
		for(i=2;i*i<=n;i++)
			if(a[i]==0&&n%i==0)
			{
				j=0;
				while(n%i==0)
				{
					j++;
					n/=i;
				}
				ans*=1+j*(1-1./i);
			}
		if(n>1) ans*=1+1-1./n;
		printf("%.0lf\n",ans);
	}


}


int main(){
	read();
	return 0;
}

posted on 2011-04-03 15:35  宇宙吾心  阅读(209)  评论(0)    收藏  举报

导航