欧拉---总结


#define maxn 100005;

//欧拉函数打表计算出phi(1),phi(2)....phi(n); 
int phi[maxn];
void phi_table(int n)
{
	for(int i=2;i<=n;i++)phi[i]=0;
	phi[1]=1;
	for(int i=2;i<=n;i++)
	{
		if(!phi[i])
		for(int j=i;j<=n;j+=i)
		{
			if(!phi[j])phi[j]=j;
		}
		phi[j]=phi[j]/i*(i-1);
	}
 } 
 //求小于n与n互质的数的数目
 int euler_phi(int n)
 {
 	int m=(int)sqrt(n+0.5);
 	int ans=n;
 	for(int i=2;i<=m;i++)if(n%i==0)
 	{
 		ans=ans/i*(i-1);
 		while(n%i==0)n/=i;
	 }
	 if(n>1)ans=ans/n*(n-1);
 }

猜你喜欢

转载自blog.csdn.net/s_h_w_s_n_g/article/details/81319786