费马小定理

最近在上计算机安全学选修课.. 读老师博客..现在当是写阅读笔记吧.

这里贴出老师的简书
建议先看看链接先..毕竟我这些东西只是搞笑一下的..

遵循一下这个原则…

  • 观察
  • 找规律
  • 求证

首先是一段python代码,其实下面的才能直接copy后直接跑(我没学过)

# n是某个正整数
n = 11;
for i in range(1, n): # i循环从1到n-1
for j in range(1, n): # j循环从1到n-1
print ((i * j) % n),# 输出 (i*j) mod n
print("\n")

发现打印的结果每一行都是 [1, n-1]的排列, 但是当n == 某个合数时规律消失

却也并非完全消失, 与n互素的行规律仍在, 后话

知道其实i, j是[1, n-1]的循环,打印的就是(ij) mod n
根据老师文章所提示,依式子以及结果,得到2条式子
i
1 mod n, i2 mod n, …, i(n-1) mod n [1]
1, 2, 3, 4, …, n-1 [2]
式子[1]与式子[2]中元素各自连乘,得另外两个相等的式子
i^(n-1) (n-1)! mod n [3]
(n-1)! mod n [4]
关键在于知道[3] == [4]后, [6]式如何得来, 即
i^(n-1)
(n-1)! ≡ (n-1)! mod n [5]
推导出
i^(n-1) ≡ 1 mod n [6]

首先给出一个定义
设m是大于1的正整数,a、b是整数,如果(a-b)|m,则称a与b关于模m同余,记作a≡b(mod m),读作a与b对模m同余

我们可以把上面的两个式子简化成
a c ≡ b c mod m [7],
现在证明, 当 c 与 m互素时, 上式可以化简成
a ≡ b mod m

∵ a * c ≡ b * c mod m
∴ m | (a * c - b * c)
∴ m | (a - b) * c ∵ m 与 c 互素
∴ m | (a - b) // 整除的性质
∴ a ≡ b mod m

上面的证明并不严谨..只是一个思路..(有问题的话恳请指正)

说了这么多..谁和你说 c 和 m 互素了?? 回到[6]式
就是问 (n-1)! 为什么和 n是互素的?
首先我们知道发现规律的n,都是素数(比如代码用的11),..而一个素数与 [1, n-1]的整数都是互素的
就是说
∀i ∈ [1, n-1], 都满足 i ≡ 1 mod n
那么根据同余关系的性质
同余式相乘 若a≡b (mod m),c≡d(mod m),则ac≡bd (mod m)
可以推得,所有的这些与n互素的元素之积, 亦即(n-1)! ≡ 1 mod n成立

根据[5][6],我们能总结出,对于素数n,取任意大于1小于n-1的整数(此条件并不必要,为什么?),我们有,i^(n-1) ≡ 1 mod n
但是依据上面的证明,显然但凡c和m互素,皆可得到式6。

上述亦即费马小定理
假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p)

最新文章

  1. 嵌入式&iOS:回调函数(C)与block(OC)回调对比
  2. Delphi多线程编程--线程同步的方法(事件、互斥、信号、计时器)简介
  3. 【Android】achartengine的柱状图和饼状图的使用
  4. Windows 10系统更换Windows 7系统磁盘分区注意事项二
  5. Practical Malware Analysis里有关inetsim\APATEDNS
  6. python 核心编程课后练习(chapter 5)
  7. IOS常见错误之一连线错误
  8. Object-c字符串操作
  9. wireshark 和 Httpwatch tcpdump
  10. 有了JSON.stringify(),处理json将变得更简单!!
  11. 《Linux/Unix系统编程手册》读书笔记5
  12. Qt Assistant介绍
  13. MOGODB REDIS
  14. 向Window BCD 文件添加VHD开机启动项的相关笔记
  15. ASP.NET Excel数据导入数据库
  16. MySQL的保留关键字,使用时尽量避免
  17. listview必须设置数据适配器才能显示出来
  18. div.2/C. They Are Everywhere<two pointer>
  19. spdlog源码阅读 (2): sinks的创建和使用
  20. zbrush曲面增加厚度

热门文章

  1. 图说使用socket建立TCP连接
  2. [CPP] Object Based Class
  3. Golang Socket编程
  4. jsonp_百度联想
  5. js控制div样式显示与隐藏,JS通过点击超链接右边(指定位置)显示一个图标
  6. <深入理解JavaScript>学习笔记(5)_强大的原型和原型链
  7. 出现<authentication mode="Windows"/>错误解决办法
  8. .net core mvc 类库读取配置文件
  9. Spring MVC No converter found for return value of type 解决方法
  10. mysql 中显示 table 的基本信息