群论的闪电介绍,通过群的欧拉费马定理
itomcoil 2025-01-06 13:23 27 浏览
欧拉-费马定理,是初等数论的重要成果,具有众多应用,包括现代密码学。它们可以通过许多不同的方法来证明,每种方法都提供有趣的见解。
在本文中,我将以它们为借口介绍群论,这是一门非常美丽且应用广泛的数学学科。
我首先陈述我打算证明的定理,内容不多。它们的内容和符号将在本文中解释。
费马小定理
如果p是素数并且a是任何小于p 的整数,则
整数
让我们回顾一下关于整数的一些事实。当我们将一个整数除以另一个整数时,我们得到一个商和一个余数。如果我用n除以a,余数为0,则a称为n的约数。除了 1 和它本身之外没有任何约数的数称为素数。如果两个数没有公约数,则称它们为互质数或互质数。整数的一个基本属性是它们可以唯一地写成素数的乘积。这使得素数成为数论中的重要组成部分。
有一个程序可以确定两个数是否互质,如果不是,则找到它们的约数。给定两个整数a和b,它们的最大公约数 (Greatest Common Divisor)或 GCD 是整除a和b的最大数。如果 GCD 为 1,则整数a和b互质。一个实际的质数与所有其他整数互质。
以下是 GCD 的一些示例:
GCD(15, 9) = 3
GCD(30, 45) = 15
GCD(15, 28) = 1
有一个用于计算 GCD 的递归算法。它被称为欧几里德算法,它非常简单,只需几行Python代码即可实现。欧几里德算法的结果是以下定理:
定理: GCD 是一个线性组合。存在整数s,t使得 as+nt = GCD(a,n)
我省略了证明,它不难但有点乏味并且与我希望涵盖的主题无关。
模运算
对于任意两个整数a, n,数字a mod n表示a除以n的余数。例如,
8 模 5 = 3
7 模 6 = 1
3 模 8 = 3
16 模 8 = 0
-1 模 9 = 8
解释表达式a mod n = b 的等效方法是说n除(ab)。
我们可以将乘法与模运算结合起来:
5 * 3 模 4 = 15 模 4 = 3
8 * 5 模 7 = 40 模 7 = 5 模 7
8 * 12 模 7 = 96 模 7 = 5 模 7
有一个巧妙的技巧可以使最后两个计算更容易。我可以先计算每个被乘数的模,而不是先计算乘积然后取模,如下所示:
8 * 12 模 7 = (8 模 7)*(12 模 7) 模 7= 1*5 模 7 = 5 模 7
一般来说:
a *b mod n = (a mod n)*(b mod n) mod n
这是关于一般算术的重要结果,稍后会派上用场:
定理:如果 GCD(a,n) = 1,则存在 x < n,使得 ax = 1 mod n。
证明:我在上一节中已经说明 GCD 是一个线性组合,因此存在整数 s,t 使得as+nt = 1,这意味着as =1- nt,由此得出as = 1 mod n . s 可能不小于n,但没关系,因为我们可以设置x = s mod n,然后它遵循
斧 = 1 模 n。
QED
群论
群是对具有可逆二元运算的集合的数学抽象。例如,如果我将一个实数a乘以一个数b ,我可以通过再次乘以1/b来恢复原始数字。一个群的重要特征是(1)它有一个元素叫做单位元,它的作用很像乘以 1 和(2)每个元素都有一个倒数。
用更正式的语言来说:
Group 是具有二元运算的集合G,用 * 表示,具有以下性质:
- G中存在一个元素1(恒等式),使得对于G中的彼此g,1*g=g*1=g
- 对于G中g中的每个元素,存在另一个元素g?1,称为g的逆元素,使得g*g?1=g?1*g = 1
- 对于G中的任何元素g,h,z,(g*h)*z = g*(h*z)
最后一个属性称为关联性。如果我们还具有对于任意两个元素 g ,h, g*h = h*g 的性质,则该群称为交换群。如果集合G的元素个数有限,则它是一个有限群,元素的个数称为群的阶,用 || 表示。出于本文的目的,我们将只处理有限交换群。
操作 * 可以代表满足这些属性的任何操作。它可能是乘法、加法、函数的组合,甚至是完全不同的东西。例如,考虑四个二进制字符串 00,01,10,11。这些字符串在异或运算 XOR 下形成一个组。在这种情况下,标识元素是 00,因为
我们将再次遇到这个群体,使用不同的结构和符号,但它具有相同的属性。
我使用符号 a2 来代表 a*a 。通常,每当我将 a 自身“乘以”k 次时,我会将结果表示为 a?
子群是G的子集H,它本身就是一个群。这意味着H必须包含身份,并且如果任何元素h在H中,则它的逆元素也必须在H中。
这是为有限群构造子群的一种方法。取任何不是恒等式的元素g,并形成幂g,g2,g3 ,...。由于群体是有限的,这些力量不能无限期地持续下去,但最终,元素将开始重复。事实上,在某些时候,会有一些 g?=1 的。这就是为什么这个子群被称为循环的并用<g>表示的原因。g?=1 的最小数k称为g的阶,它是<g>中元素的数量。
组的例子
乘法下的整数是不是群的例子。有一个恒等元,但没有乘法逆元,因为没有整数可以与 3 相乘,例如,得到 1。
有理数(0 除外)是一个群,因为任何非零有理数,写为两个整数的商/ 具有乘法逆数/ a。当然,这是一个无限群。
如果我们不使用正则乘法,而是使用模乘法,则有一种方法可以用整数构建有限群。但我们必须小心,因为有些情况我们想避免。例如,2 *3 mod 6 = 0。因此,2 和 3 没有 mod 6 的乘法逆元。
对于任何整数n,我们将集合U(n)定义为小于n且与? n互质的所有整数a。
定理:定义为 {k < n,使得 GCD(k,n) = 1} 的集合 U(n) 是乘法 mod n 下的有限交换群。
证明:
模乘法继承了普通乘法的交换律和结合律,所以我们已经有了这些性质。我们还有身份元素,它仍然是 1。此外,根据它的定义,集合是有限的。我们只需要确定逆的存在。
在上一节中,我们证明了如果GCD(a, n)= 1,则存在x < n使得ax = 1 mod n,这意味着x是a的倒数。
QED
例子:
U(4)= {1,3}
U(p) = {1,2,3,..p-1} 对于素数 p
U(8) = {1,3,5,7}
让我们仔细看看最后一个例子。注意
32 = 52 = 72 = 3*5*7 = 1 mod 8
此外,
3*5 = 7 模 8,5*7 = 3 模 8,7*3 = 5 模 8。
这与我之前使用符号 00,01,10,11 和 XOR 运算构建的组完全相同!
拉格朗日定理
我们现在准备建立关于有限群的第一个重要事实。我们的最终目标,即欧拉-费马定理,将是这一事实的简单结果。
拉格朗日定理子群的阶数除以群的阶数。
证明 :
令H为有限群G的非平凡子群。非平凡意味着H不等于G,也不是 仅包含身份元素 {1} 的群。让|H| = k是H的阶数
让我们按某种顺序枚举H的元素:
H = {1,h1,h2, ...}
然后对于G的每个元素g,形成定义为的集合 g*H
{g, g*h1, g*h2, …}
请注意,由于逆元的存在, g*H中的所有元素都是不同的,这意味着g*H与H具有相同数量的元素。
我们需要确定以下事实:对于G的两个不同元素g1和g2,集合g1*H和g2*H要么相同要么不相交。
假设它们不相交,因此它们有一个公共元素x。那么,在G中存在a、b,在H中存在 h1、h2,这样:
x= a*h1和x = b*h2
令y为a*H的任意元素,我可以将其写为y = a*h。然后
现在,请注意因为H是一个子群并且元素h、h1、h2都属于H,所以h2*h1?1*h也属于 H。这意味着y属于b*H,这意味着如果它们有任何公共元素,集合a*H和b*H是相同的。
我们建立的最后一个事实,即不同的集合a*H是不相交的,是证明定理的关键。由于G的每个元素g都属于这些集合之一(特别是g*H),因此G可以写成不相交集合的并集。假设有m 个这样的不相交集合。此外,这些集合中的每一个都具有相同数量的元素k。这意味着|G| = mk = m|H| ,也就是说,H的阶数除以G的阶数。
QED
我应该指出,虽然我关注的是交换群,但拉格朗日定理对于非交换群也适用,因为它的证明中没有使用交换性。
欧拉费马定理
引用库尔特·哥德尔的话,我们现在来到练习的对象。首先,我将介绍最后一点符号。我们之前看到的集合U(n)的阶有一个特殊的名字,称为 E uler's totient 函数
()=|U(n)| = #{k<n 使得 GCD(k,n) = 1}。
这是小于n且与?? n互质的正整数的数目。
以下推论是拉格朗日定理的直接推论:
推论:对于有限群 G 的每个元素 g
结论
这是对群的快速介绍,我们在其中建立了有限群的拉格朗日定理,然后用它来证明欧拉-费马定理和费马小定理。这些定理在现代密码学中有重要的应用,例如 RSA 算法和 Diffie-Hellman 密钥交换。我很快就会写另一篇文章,我将在本文介绍的材料的基础上解释这些密码分析算法。
- 上一篇:如果你真的想学Python可以试试我的方法
- 下一篇:【技术分享】RSA算法详解
相关推荐
- selenium(WEB自动化工具)
-
定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...
- 开发利器丨如何使用ELK设计微服务中的日志收集方案?
-
【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...
- 高并发系统设计:应对每秒数万QPS的架构策略
-
当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...
- 2025 年每个 JavaScript 开发者都应该了解的功能
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...
- JavaScript Array 对象
-
Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...
- Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战
-
刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...
- 动力节点最新JavaScript教程(高级篇),深入学习JavaScript
-
JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...
- 一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code
-
当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...
- 「晚安·好梦」努力只能及格,拼命才能优秀
-
欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...
- JavaScript 中 some 与 every 方法的区别是什么?
-
大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...
- 10个高效的Python爬虫框架,你用过几个?
-
小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...
- 12个高效的Python爬虫框架,你用过几个?
-
实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...
- pip3 install pyspider报错问题解决
-
运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...
- PySpider框架的使用
-
PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...
- 「机器学习」神经网络的激活函数、并通过python实现激活函数
-
神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)