1. 程式人生 > >poj 1284 求一個數的原根個數

poj 1284 求一個數的原根個數

#include<stdio.h>
#define MAX_N 65536
int euler[MAX_N];
void init_euler()
{
	int i,j; 
	for(i=0;i<MAX_N;i++)
	euler[i]=i;
	for(i=2;i<MAX_N;i++)
	{
	  if(euler[i]==i)
	     for(j=i;j<MAX_N;j+=i)
	     {
	     	euler[j]=euler[j]/i*(i-1);
		 }
    }
}
int main()
{
	int a;
	init_euler(); 
	while(~scanf("%d",&a))
	{
		printf("%d\n",euler[a-1]);
	}
	return 0;
}