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