若n是质数p的k次幂,φ(n) = φ(pk) = pk − pk − 1 = (p − 1)pk − 1,因为除了p的倍数外,其他数都跟n互质。
欧拉函数是积性函数,即是说若m,n互质,φ(mn) = φ(m)φ(n)。
-
若
-
则
。
-
例如
#include <iostream>
#include <cstring>
using namespace std;
bool pr[1000002];
int prime[80000];
long long result[1000002];
void p()
{
memset(pr,0,sizeof(pr));
int k=0;
for(int i=2;i<=1000000;i++)
for(int j=2;j*i<=1000000;j++)
pr[i*j]=1;
prime[0]=1;
for(int i=2;i<=1000000;i++)
if(pr[i]==0)
prime[prime[0]++]=i;
}
int eular(int n)
{
int ans=1;
for(int i=1;i<=prime[0]&&prime[i]*prime[i]<=n;i++)
{
if(n%prime[i]==0)
{
n/=prime[i];
ans*=(prime[i]-1);
while(n%prime[i]==0)
{
ans*=prime[i];
n/=prime[i];
}
}
}
if(n>1)
ans*=(n-1);
return ans;
}
int main()
{
p();
int n;
result[1]=result[2]=1;
for(int i=3;i<=1000000;i++)
result[i]=result[i-1]+eular(i);
while(cin>>n&&n)
cout<<result[n]<<endl;
return 0;
}