欧拉函数:对正整数n,欧拉函数是小于等于n的数中与n互质的数的数目。
欧拉函数又称为φ函数。
下面是欧拉函数的一些性质:
如果n为某一个素数p,则φ§=p-1;
如果n为某一个素数p的幂次
p
a
p^a
pa,则φ(
p
a
p^a
pa)=(p-1)
p
(
a
−
1
)
p^(a-1)
p(a−1) ;*
*如果n为任意两个互质的数a,b的积,则:φ(a*b)=φ(a)φ(b);
如果p为质数。
*如果i mod p =0,那么φ(i*p)=φ(i)p;
如果i mod p ≠0,那么φ(ip)=φ(i)(p-1);
代码实现
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=10000;
int phi[N+10],prime[N+10],tot,ans;
bool vis[N+10];
void getphi()
{
int i,j;
phi[1]=1;
for(i=2;i<=N;i++)
{
if(!vis[i])
{
prime[++tot]=i;
phi[i]=i-1;
}
for(j=1;j<=tot;j++)
{
if(i*prime[j]>N)break;
vis[i*prime[j]]=true;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else
{
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
}
int main()
{
getphi();
int n;
while(~scanf("%d",&n))
{
printf("%d\n",phi[n]);
}
return 0;
}