欧拉函数

欧拉函数∮是数论中的一个重要函数,设n是正整数,∮(n)表示{0,1,2,...n-1}中与n互素的数的个数。例如∮(12)=4,因为与12互素的数有1,5,7,11.这里认为∮(1)=1.下面给出欧拉函数的计算公式。

∮(n)=n(1- 1/p1)(1- 1/p2)(1- 1/p3)...(1- 1/pk)

欧拉函数的性质:

 1.若n是质数p的k次幂,φ(n)= (p-1)p^(k-1)
 2.若m,n互质,φ(mn)= φ(m)φ(n)

 3.若n为奇数,则∮(n)=∮(2n)

代码:

欧拉函数的筛法代码:

#include<stdio.h>
#define maxn 100
int prime[maxn];
int ans[maxn];
int main()
{
    prime[0]=prime[1]=0;
    for(int i=2;i<=maxn;i++)
        prime[i]=1;
    for(int i=1;i<=maxn;i++)
        ans[i]=i;
    for(int i=2;i<=maxn;i++)
    {
        if(prime[i])
            for(int j=i;j<=maxn;j+=i)
              {
                  ans[j]=ans[j]/i*(i-1);
                  prime[j]=0;
              }
    }
    for(int i=1;i<=maxn;i++)
        printf("%d %d
",i,ans[i]);
    return 0;
}

单独求欧拉函数代码:

int eular(int n)
{
  int ret=1,i;
  for(i=2;i*i<=n;i++)
    if(n%i==0)
    {
      n/=i,ret*=i-1;
      while(n%i==0)
      n/=i,ret*=i;
    }
  if(n>1)
    ret*=n-1;
  return ret;
}
2-100的欧拉函数值表
n φ(n)
2 1
3 2
4 2
5 4
6 2
7 6
8 4
9 6
10 4
11 10
12 4
13 12
14 6
15 8
16 8
17 16
18 6
19 18
20 8
21 12
22 10
23 22
24 8
25 20
26 12
27 18
28 12
29 28
30 8
31 30
32 16
33 20
34 16
35 24
36 12
37 36
38 18
39 24
40 16
41 40
42 12
43 42
44 20
45 24
46 22
47 46
48 16
49 42
50 20
51 32
52 24
53 52
54 18
55 40
56 24
57 36
58 28
59 58
60 16
61 60
62 30
63 36
64 32
65 48
66 20
67 66
68 32
69 44
70 24
71 70
72 24
73 72
74 36
75 40
76 36
77 60
78 24
79 78
80 32
81 54
82 40
83 82
84 24
85 64
86 42
87 56
88 40
89 88
90 24
91 72
92 44
93 60
94 46
95 72
96 32
97 96
98 42
99 60
100 40
原文地址:https://www.cnblogs.com/lyf123456/p/3397532.html