欧拉函数∮是数论中的一个重要函数,设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