费马小定理,欧拉函数

在证明这些定理之前先证明一个有意思的定理。

            对于0 mod m,n mod m , 2n mod m, 3n mod m, 4n mod m... (m-1)n mod m

对应解集序列 一定有 m/d份 0 d 2d 3d..m-d. (不一定按照顺序) 这样的解。 其中d = gcd(n,m)

具体点:n=8,m=12.  d = gcd(n,m)=4

对于 0 mod 12,8 mod 12,16 mod 12,24 mod 12,32 mod 12,40 mod 12...88 mod 12.

对应解  0           8             4              0            8          4  ..... 4

可见结论应该是对的。

证明:

Kunth的证明很简略,当时我没看懂。虽然是一些简单的同余运算。

以下是我的见解:

证明:(0~m-1)n mod m 的解集是m/d个0 d 2d 3d ...m-d循环。

称(0~m-1) 为 k,m/d个0 d 2d 3d ...m-d循环为D

1:证明解集D是可行且唯一的。

另外k=(0~m-1),D = m/d个0 d 2d 3d ...m-d循环  (重申)

即证明 kn mod m 的解集是 m/d个0 d 2d 3d ...m-d循环 。

即证明kn  ≡ D (mod m)   (看不懂这个可以去看一下我写的同余定理以及基本的数论知识,欧几里得,扩展欧几里得,中国剩余那里。)

即要证明kn  = m'm+D (其实直接从上一步就可以得到下面那一步) 有解k

kn - m'm = D也就是证明这个式子有解.

这种式子何时有解?参见扩展欧几里得中的证明过程中的裴蜀定理(不得不说欧几里得真心有用,以及裴蜀定理)

即D为gcd(n,m)的正整数倍的时候,且唯一也就是符合D的定义了。我这里就不赘述了。

附上链接关于这个式子的求解以及性质:

 

 再从另外一个角度:

  既然D构成了循环。我们建立映射关系。可以认为有多个k对应着d.如果你深熟裴蜀定理。你这个时候大概就能知道前因后果了。其实我们要证明的东西就是裴蜀定理。只是一个换了个说法而已。

2:证明:当 k.对应解为x(当然了,x为d的正整数倍 )时k'-k = m 时k'对应解也为x.就是证明符合上述的循环

 k'n mod m = (m+k)n mod m = ((mn mod m)+(kn mod m)) mod m = (0 + kn mod m) mod m = kn mod m = x

所以你会发现循环的造成原因是因为k'为k+zm (z为整) k为原解 (这个原解的说法有点模糊。可以认为就是构成第一个循环解对应的k好了)

其实这是扩展欧几里得(大家都爱全部都归为这个)的一种应用吧。

完整地描述一下:n'n+m'm = d

当方程有正整数解n'和m'  的时候 d 符合 k*gcd(n,m) (k为正整数,0在此处就不探讨了),且对应解n' m' 有多组。 其中n'的解集 可以是 n'+qm (q为整数)

费马小定理:

  n^p-1 ≡ 1 (mod p)    ->    n^p-1 mod p = 1.  其中n和p互素。

证明:

我们可以构造 p-1个  n mod p,2n mod p,3n mod p ...(p-1)n mod p

根据同余运算(把余数转成同余式子):

那么就有      (p-1)! n^(p-1) ≡ (p-1)! (mod p)

    其中 (p-1)!不能整除p 所以式子变成 n^(p-1) ≡ (mod p),得证。

   又可以在两边均乘n.   n^p ≡ n (mod p)

 

这里有一个思维小插曲:

考虑下面这个证明:

由于n和p互素.所以有n ≡ 1(mod p).根据同余定理 n^(p-1) ≡ 1^(p-1) (mod p) -> n^(p-1) ≡ (mod p),得证。

简单明了。可这是错的。因为前提就错了。由于n和p互素.不一定有n ≡ 1(mod p)

只能说 由于n和p互素,存在kn ≡ 1(mod p) (k|1,2,3..p-1) (根据上述定理)

举例 n=2 p=5 .有3n mod p = 1.而 n mod p = 2.

 

 

欧拉函数:

作用:输入n,你想知道1~n中有多少个数和n是互素的吗?

   这就是欧拉函数的一个作用。而且还能让扩展费马小定理。算质因子之和

 

欧拉函数记为φ函数也就是说φ(1) = 1,φ(2)=1,φ(3)=2...

对于φ(n).

  如果n为素数,即φ(n) = n-1.

  如果n为合数,即φ(n) < n-1.

 

显然这对于应用还是不够的。我们当然想要能够输入n就可能获得具体结果,而不单只是范围.

对于这个问题:我们可以接下来的证明中解决该问题并且发现新的东西。

 

如果说m是一个素数幂p^k (比如2^3).φ(p^k)还是可以计算的。

对于0~p^k -1中有多少个和p^k互素呢?

那我们可以先找什么数中没有p因子.

那么可以找有p因子的数。然后总个数减去和p^k非互素的数。

 在0~p^k -1 中有 p的倍数有 (0 p 2p 3p 4p ...p^k-p) 最后一位这个你可以列一下不等式算算,发现是<p^k的。那就是p^k-p了。

那么易得 p 的倍数的个数有 p^(k-1)个

那么 φ(p^k) = p^k - p^(k-1) = p^(k-1)*(p-1)。 所以我们就解决了。当这个数是素数幂的时候。欧拉函数的计算。

那么如何扩展到任何正整数呢?

 

根据算术基本定理。m = p1^(mp1)* p2^(mp2)....&pn^(mpn)。不懂的话可以去查一下 算术基本定理

那么如何利用这个呢?我们可以想到把一个数拆成各个素数幂相乘。而这经过欧拉函数会有什么关系呢?就好比一个函数我们知道自变量是相乘的。

并且知道各个自变量的函数值。我们要求这个乘积的对应函数值该如何?

即φ(a) = a1,φ(b) = b1,那么φ(a*b) = ?

证明 φ(a*b) = a1*b1 也就是证明欧拉函数是积性函数。这个证明网上有很多。具体做法就是引入剩余系。利用分量来证明即可。不赘述了。

而当欧拉函数是积性的时候。我们可以推导出以下的关系式:

(待上图)。

 

这里附上实现欧拉函数的code:

一个是基础实现 一个是筛法。

 

posted @ 2015-04-05 03:32  Milkor  阅读(443)  评论(0编辑  收藏  举报