![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a504174e49529afd70e851e999df78a5.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/255cf92d2af4b65231e560726f194807.png)
欧拉函数的详细讲解
#include<bits/stdc++.h>
using namespace std;
int euler(int n){
int sum=n;
int i;
for(i=2;i<=n;i++){
if(n%i==0){
sum=sum/i*(i-1);
while(n%i==0)
n/=i;
}
}
if(n>1)
sum=sum/n*(n-1);
return sum;
}
int main(){
int n;
while(cin>>n){
cout<<euler(n)<<endl;
}
return 0;
}
int euler(int n){
int sum=n;
int i;
for(i=2;i<=n;i++){
if(n%i==0){
sum=sum/i*(i-1);
while(n%i==0)
n/=i;
}
}
if(n>1)
sum=sum/n*(n-1);
return sum;
}
void Init ()
{
int i, j;
for (i=0; i<N; i++)
oula[i] = i;
for (i=2; i<N; i++)
{
if (oula[i] == i)
{
for (j=i; j<N; j+=i)
oula[j] = oula[j] / i * (i - 1);
}
}
}