欧拉函数

这是欧拉函数,但是我看不懂

这是欧拉

老师给的正解在下面:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 long long n,ans;
 5 int main()
 6 {
 7     freopen("phi.in","r",stdin);
 8     freopen("phi.out","w",stdout);
 9     scanf("%lld",&n);
10     ans=n;
11     int i=1;
12     while(n!=1)
13     {
14         i++;
15         if(n%i==0)
16         {
17             ans=ans/i*(i-1);
18             n=n/i;
19         }
20         while(n%i==0) n=n/i;
21     }
22     printf("%lld",ans);
23     return 0;
24 }    //看不懂,但大概是个高逼格的算法 

试着用流程图画了一下

画完还是不懂

那就硬记吧(

这里给大家安利一下我的暴力算法

如果爆零的话抱歉了(

 1 #include<cstdio>
 2 using namespace std;
 3 bool huzhi(int m,int n)    //判断是否互质 
 4 {
 5     if(n % m == 0)    return false;    //能整除的肯定不互质 
 6     if(n % m == 1)    return true;    //余1的肯定互质了 
 7     return huzhi(n % m,m);    //参考某gcd算法 
 8 }
 9 int main()
10 {
11     freopen("phi.in","r",stdin);
12     freopen("phi.out","w",stdout);
13     int n,tot = 1;
14     scanf("%d",&n);
15     for(int i = 2;i <= n;i++){
16         if(huzhi(i,n))    tot++;    //简单易懂 
17     }
18     printf("%d",tot);
19     return 0;
20 }    //我也不知道这代码可以得几分 

没了

原文地址:https://www.cnblogs.com/aristocrat/p/8468861.html