在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。
#include<stdio.h>
#include<math.h>
void f(int m)
{
int k=m,p,i;
p=(int)sqrt(m+0.5);
for(i=2;i<=p;i++)
{
if(m%i==0)
{
k=k/i*(i-1);//欧拉函数,k乘以(1-1/i) i是k质因子
while(m%i==0) m/=i; //去除m中所有含i的因子;
}
}
if(m>1) k=k/m*(m-1);
printf("%d\n",k);
}
int main()
{
int n,m;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
f(m);
}
return 0;
}
筛选素数的同时求出质因子的个数
#include<stdio.h>
#define maxn 15000000
int a[maxn];
void f()
{
int i,j;
a[1]=1;a[2]=0;
for(i=2;i*i<=maxn;i++)
if(!a[i])
for(j=i;j<=maxn;j+=i)
{
if(!a[j]) a[j]=j;
a[j]=a[j]/i*(i-1);//欧拉函数,先把从1-maxn中质因子中含i的都先乘(1-1/i);
}
}
int main()
{
int m;
f();
while(1)
{
scanf("%d",&m);
printf("%d\n",a[m]);
}
return 0;
}