在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。
φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数(看准是质因数 刚开始以为是因数 怎么算都不对),x是不为0的整数。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 # include <stdio.h> 2 # include <math.h> //0是朋友 1不是朋友 3 # include <string.h> 4 5 int a[33000], b[33000]; 6 7 int main(void) 8 { 9 int n, m; 10 scanf("%d", &m); 11 while(m--) 12 { 13 scanf("%d", &n); 14 memset(a, 0, sizeof(a)); 15 memset(b, 0, sizeof(b)); 16 a[0] = 0, a[1] = 0, a[2] = 1; 17 for(int i = 3; i <= n; i++) 18 a[i] = i%2; 19 int k = floor(sqrt(n)+0.5); 20 for(int i = 3; i <= k; i++) //质数 21 { 22 if(a[i]) 23 { 24 for(int j = 2*i; j <= n; j += i) 25 { 26 a[j] = 0; 27 } 28 } 29 } 30 31 for(int i = 2; i < n; i++) //因数 32 { 33 if(n % i == 0) 34 { 35 b[i] = 1; 36 } 37 } 38 double ans = n; 39 for(int i = 2; i < n; i++) 40 { 41 if(b[i] && a[i]) //质因数 42 { 43 ans*=(1-1.0/i); 44 } 45 } 46 if(a[n]) 47 ans--; 48 printf("%.0lf\n", ans); 49 } 50 51 52 53 return 0; 54 }