欧拉函数(数学)

 

 

 

在数论,对正整数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的整数。

 

 

 

 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 }
欧拉函数模板题

 

posted @ 2013-09-24 15:31  GLSilence  阅读(453)  评论(0编辑  收藏  举报