对欧拉函数的理解

了解欧拉函数前,先来了解一下费马小定理。

 

费马小定理:假如p质数,且(a,p)=1,那么 a^(p-1)≡1mod p)。即:假如a整数p质数,且a,p互质(即两者只有一个公约数1)那么a^(p-1)%p=1

====================================================================

举例:a=5p=3(a整数p质数),5^(3-1)%3=25%3=1

====================================================================

 

欧拉函数:用来求1...n-1范围内与n互质的数的个数(φ(n))。若n,a正整数,且n,a互质,则:a^φ(n)≡1(mod n)a^φ(n)%n=1

====================================================================

举例:

例如n=12a=5an互质),比12小的数且与12互质的数有15711,所以φ(n)=45^4%12=625%12=1

另求φ(n),假如12=2*2*3φ(n)=12*(1-1/2)*(1-1/3)=4

====================================================================

 

可以用欧拉定理证明费马小定理a^(p-1)%p=1:

由于p是质数,所以有φ(p) = p-1,代入欧拉定理(a^φ(n)%n=1)即可证明。推论:对于任意正整数a,有a^p ≡ a (mod p),因为a能被p整除时结论显然成立。

 

 

一些重要的定理:

1>若n是质数p的k次幂,φ(n) = p^k-p^(k-1) =(p-1)p^(k-1),因为除了p的倍数外,

其他数都跟n互质。

2>若n为素数,φ(n)  = n - 1;(同第6条)

3>当n为奇数时,φ(2n)=φ(n)。

4>欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。

5>欧拉定理:对任何两个互质的正整数a, m, m>=2有 a^φ(m) ≡ 1(mod m)。

6>费马小定理:当m是质数p时,此式则为:a^(p-1)≡1(mod m)

 

===================================================================

 

欧拉函数代码如下

 

int eular(int n) {
    int i, res = 1;
    for(i = 2; i*i <= n; ++i) {
        if(n%i == 0) {
            n /= i; res *= i - 1;
            while(n%i == 0) {
                n /= i; res *= i;
            }
        }
    }
    if(n > 1)   res *= n - 1;
    return res;
}

 

附上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
 

 

posted @ 2016-03-28 15:07  HiJuly  阅读(641)  评论(0编辑  收藏  举报