poj 1084

原根的求法。

代码:

#include<iostream>
#include<fstream>
#include<cmath>

using namespace std;

int a[65537];
int n;

void read(){
//	ifstream cin("in.txt");
	int i,j,k,ans,n;
	for(i=4;i<=65536;i+=2)
		a[i]=1;
	for(i=3;i<=65536;i+=2)
		if(a[i]==0)
			for(j=2*i;j<=65536;j+=2)
				a[j]=1;
	while(cin>>n){
		n--;ans=1;
		
			for(i=2;i<=n&&n!=1;i++)
				if(a[i]==0&&n%i==0)
				{
					j=0;
					while(n%i==0)
					{
						j++;
						n=n/i;
					}
					ans*=pow(1.*i,j-1);
					ans*=i-1;

				}
			cout<<ans<<endl;
	}
}

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

posted on 2011-03-29 21:48  宇宙吾心  阅读(816)  评论(1编辑  收藏  举报

导航