信息安全与数学基础-笔记-⑤原根与阶

news2024/10/7 7:33:27

知识目录

原根

  • 什么是原根?
    设 (a,m)= 1, 并且 a e a^e ae 1 (mod m) ,则我们称: o r d m ord_m ordm(a) = e,ord也叫做群论,也可以叫。假如: o r d m ( a ) ord_m(a) ordm(a) = ϕ ( m ) \phi(m) ϕ(m),那么我们就称a是模m的原根。

  • 原根又称:本原元,生成元

  • 对ord的解释:ord就是表示a的阶,是使 a e a^e ae 三 1 (mod m)成立的最小的数,e要在1-(m-1)的范围内找,必然有一个数能满足式子的,因为至少来说你可以使用欧拉定理 a ϕ a^\phi aϕ ( ^( ( m ^m m ) ^) ) 1 (mod m)

  • 我对原根的理解方式:a,m互素,并且ord = e为最小使 a e a^e ae 1 的数字,然后在 a e a^e ae 1 (mod m)中的e要等于 ϕ ( m ) \phi(m) ϕ(m)的时候就称a是m的一个原根,这里用把e用 ϕ ( m ) \phi(m) ϕ(m)替换掉之后就变成了欧拉函数: a ϕ a^\phi aϕ ( ^( ( m ^m m ) ^) ) 1 (mod m),本质就是在保证其他限制条件满足的情况下,主要要满足的就是当e等于 ϕ ( m ) \phi(m) ϕ(m),简而言之,e是能满足式子的最小数字,但他又是欧拉函数,在素数中容易让我混淆,因为假如a是素数,那么欧拉函数就是素数-1,因此我时不时会觉得该数字既是最小也是最大。但仔细想想后其实是满足同余1的最小数字,因为最大的数字才满足该条件,就是最小的数字满足同余1的,那么前面的数字必然是能够使 a e a^e ae重新组成一个简化剩余系(也是群),也就是前面的都不是余1的且不同余数 。

  • ❀ a必须是模m的简化剩余系 ❀

  • 原根可以不存在,但阶一定存在。

原根在后面的密码的加密解密中大有用处

  • 如何求原根?
    不难发现,在上面模m的时候,数字其实a的范围就限制在了1 ~ (m-1) 的范围内,因为a是模m的简化剩余系,并且无论a数字多大终究会以模m的形式进行计算,所以我们找原根最原始的办法就是从1开始找,1必然不是原根,因为简化剩余系范围内,第一个数字1就能使1同余1,因此1不会是式子的原根。自此,我们开始往后找,假设m是素数,那么就是找2,3,4,5…m-1,一个个尝试。
    2 1 2^1 21, 2 2 2^2 22, 2 3 2^3 23, 2 4 2^4 24 2 m 2^m 2m − ^- 1 ^1 1 mod m
    3 1 3^1 31, 3 2 3^2 32, 3 3 3^3 33, 3 4 3^4 34 3 m 3^m 3m − ^- 1 ^1 1 mod m
    4 1 4^1 41, 4 2 4^2 42, 4 3 4^3 43, 4 4 4^4 44 4 m 4^m 4m − ^- 1 ^1 1 mod m



    直到m-1
    如果有一个数字a满足: a ϕ a^\phi aϕ ( ^( ( m ^m m ) ^) ) 1 (mod m)就是原根。

  • 把原根的所有阶都算出来,其结果是模数m的简化剩余系,比如 ↓
    -

  • 总结:
    由于在模的世界中进入计算后最大的数字大不过模数。假设模数为m,那么原根是在m的简化剩余系中找,同理 ,因为模m,所以阶(e)的范围是在1-(m-1) 范围内,即使超出了,在后面会讲到其实阶也能进行模运算后再进入计算。然后就是利用一些技巧计算出在该范围内哪一些是原根了。后面继续学习方法技巧。

一些求原根的定理↓

在这里插入图片描述

o r d m ( a ) ord_m(a) ordm(a) | ϕ ( m ) \phi(m) ϕ(m)

观察上图会发现能使1-6同余1的阶是:1 3 6 6 2,而这些数字都是 ϕ ( m ) \phi(m) ϕ(m)的因子。
因此我们在找原根的时候就可以:①先算出欧拉函数②分解出欧拉函数的因子③不用1-6的(e)阶去算(a)作为简化剩余系的数字,只需要用e是欧拉函数的因子去算(a)简化剩余系底数,满足定义就是原根。上图中的3 5就是模7的原根。

  • 该定理反过来可以进一步推敲:
    因为 ϕ ( m ) \phi(m) ϕ(m)是必然会使a同余1,假设 a d a^d ad 1 (mod m) ,
    那么 o r d m ( a ) ord_m(a) ordm(a) | d,因为ord是最小的,在一个a(a是我们在简化剩余系中找的一个数),假如不是原根,d必然比ord大,因此是d的因子,上面提到的使同余1的阶都是 ϕ ( m ) \phi(m) ϕ(m)的因子,即使d不是 ϕ ( m ) \phi(m) ϕ(m)但是因子之间必然也是倍数关系。
  • 几个简单性质
    在这里插入图片描述
  • 利用原根查表求逆
    在这里插入图片描述
    在这里插入图片描述
    假设我们求: 8 − 8^- 8 1 ^1 1 (mod 17)
    对应在表中,8是对应着 5 2 5^2 52,也就是求( 5 2 5^2 52) − ^- 1 ^1 1
    5 − 5^- 5 2 ^2 2 × 5 1 5^1 51 6 ^6 6 = 5 1 5^1 51 4 ^4 4,那么 5 1 5^1 51 4 ^4 4的阶14对应着表中的15,所以 8 − 8^- 8 1 ^1 1 是 15。若已知原根表,我们无须复杂计算即可求出一个数的逆元。
    (为什么乘以 5 1 5^1 51 6 ^6 6:因为 ϕ ( 17 ) \phi(17) ϕ(17) = 16, a ϕ a^\phi aϕ ( ^( ( m ^m m ) ^) ) = 1,所以直接乘以 5 1 5^1 51 6 ^6 6相当于乘1)

原根和阶的关系

在这里插入图片描述
解释:因为ord是最小数能使a同余1,既然d , k 是同余的,那么必然超出一轮a阶次幂计算中,就好比2模3等于2,5模3也等于2,3和5就是过了一轮模数。
再来一个循环例子:11211211,假设第一个数字为1,那么第四个数字也是1,在该循环中,循环的是112,因此也是过了一轮循环。阶的关系也是类似的。
下面是推论:
在这里插入图片描述

  • 阶的性质定理
    在这里插入图片描述

解释:背熟吧,我脑力不够理解不了。
下面是推论:
在这里插入图片描述
解释:因为已知了g是原根,再加上在上面性质中,ord和d是互素的话,那么最大公因数为1,所以ord a d a^d ad = ord a,分母为1。已知g是原根前提下,ord必然等于 ϕ ( m ) \phi(m) ϕ(m),所以 ϕ ( m ) \phi(m) ϕ(m) = ord。推论就是这么来的。

  • 从上述推论得出结论
    但凡我们找到了一个原根,想要找出其他原根的时候就不再需要继续往下一个一个乘以 ϕ ( m ) \phi(m) ϕ(m)的因子了,这时候我们利用( o r d m ( a ) ord_m(a) ordm(a),d)=1互素的性质,当两个互素的时候就是 o r d m ord_m ordm(a d ^d d) = o r d m ( a ) ord_m(a) ordm(a),也就是说a d ^d d 也为原根,我们反过去推敲,就知道我们只需要找一个d与原根的阶互素即可,原根的阶必然是 ϕ ( m ) \phi(m) ϕ(m),所以与 ϕ ( m ) \phi(m) ϕ(m)互素的d,就是能使a d ^d d 也为原根的条件。

  • 原根个数
    在这里插入图片描述

  • 素数原根
    在这里插入图片描述


  • 再次总结:
    因为太乱了,我必须出手整理一下整个流程给自己复习。

  • 开始
    初识原根,原根是模m的简化剩余系中的成员。
    设原根a,次方数为e,
    a可能是简化剩余系中任何一个数字,e的范围是[1,m-1]
    a作为简化剩余系,每个数字都要从遍历e,即: a e a^e ae
    从中找到能使 a e a^e ae 1,
    假如一个简化剩余系中的某个数字a有多个能使 a e a^e ae 1,那么这位简化剩余系中的数字a并不是我们找的原根。
    原根需要使 a e a^e ae 1,同时1~m-1中只有,唯有,唯一有一个数e,且e = ϕ ( m ) \phi(m) ϕ(m),这时候就是原根了
    a计算完后继续换下一个简化剩余系中的数字计算,步骤也是上面的步骤,只要出现了 a e a^e ae 1的e不等于 ϕ ( m ) \phi(m) ϕ(m)就不用再继续往高次幂算了,直接判断该数字不是原根

  • 进阶方法:稍微简化了求原根的步骤
    求出 ϕ ( m ) \phi(m) ϕ(m)后,找出 ϕ ( m ) \phi(m) ϕ(m)的因子组成数字,这些因子组成数字就是有可能作为e使 a e a^e ae同余1
    只需要把这些因子作为次方数即可,不用再从e的范围[1-,m-1]这么大的范围中依次乘进去,计算量太大了
    如果这些因子作为e都不能使 a e a^e ae 1,那么就可以确定a就是原根。
    但是我们找出一个原根后,后面还可能会有很多不同的,这时候我们再重复上面的步骤慢慢从简化剩余系中找。

  • 史诗级连锁反应求原根
    认识阶
    上述我们的当 a e a^e ae 1的时候 e就叫做阶,切记,这里没有要求e要和 ϕ ( m ) \phi(m) ϕ(m)相等,也就是e从1-(m-1),从小到大开始递增次方数找原根的时候,找到了就是叫做阶,同时因为是从小到大开始找,所以阶也叫是“最小整数”使 a e a^e ae同余1.
    知道阶的定义之后,我们只需要按照进阶方法找出一个原根后,
    找出与 ϕ ( m ) \phi(m) ϕ(m)互素的数字,该数字范围一般是非负且比 ϕ ( m ) \phi(m) ϕ(m)小的数字。
    然后用找到的一个原根a遍历这些与 ϕ ( m ) \phi(m) ϕ(m)互素且比 ϕ ( m ) \phi(m) ϕ(m)小的数字,遍历之后的每一个数字模m后就是所有原根了。

  • 完美收工


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/389531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React组件性能优化若干问题

react组件的性能优化的核心是减少渲染真实DOM节点的频率,减少Virtual DOM比对的频率。组件卸载前执行清理操作在组件中为window 注册的全局事件,以及定时器,在组件卸载前要清理掉。防止组件卸载后继续执行影响应用性能。import React from re…

分享十个前端Web3D可视化框架附地址

Three.js:Three.js是一个流行的3D库,提供了大量的3D功能,包括基本几何形状、材质、灯光、动画、特效等。它是一个功能强大、易于使用的框架,广泛用于Web3D可视化应用程序的开发。Three.js:https://threejs.org/Babylon…

【强烈建议收藏:MySQL面试必问系列之索引专题】

一.知识回顾 前面的文章我们一起学习了数据库的事务、事务以及并发来的问题、数据库锁机制、数据库中CURD的SQL语句底层执行流程、数据库SQL优化专题,如果你一步一步的跟下来,一定会帮助你建立一个知识体系。接下来我们再一起学习数据库索引专题&#x…

Toponogov 比较定理及其应用

1. Toponogov 比较定理的背景来源 Victor Andreevich Toponogov(1930-2004) 是苏联数学家,Toponogov 比较定理是他的博士论文题目,在1958年答辩。他证明这个定理是为了用于证明截面曲率假设下的分裂定理和最大直径定理&#xff0…

具有精密内部基准的 DACx0502 简介及驱动应用示例

DACx0502 说明 16 位 DAC80502、14 位 DAC70502 和 12 位DAC60502 (DACx0502) 数模转换器 (DAC) 均为具有电压输出的高精度、低功耗器件。 DACx0502 线性度小于 1LSB。凭借高精度和微型封装特性,DACx0502 非常适合以下 应用: 增益和失调电压校准、电流…

计算机网络协议详解(二)

文章目录🔥HTTP协议介绍🔥HTTP协议特点🔥HTTP协议发展和版本🔥HTTP协议中URI、URL、URN🔥HTTP协议的请求分析🔥HTTP协议的响应分析🔥MIME类型🔥HTTP协议介绍 HTTP协议介绍 什么是超…

反转链表(精美图示详解哦)

全文目录引言反转链表题目描述与思路实现总结引言 在学习了单链表的相关知识后,尝试实现一些题目可以帮助我们更好的理解单链表的结构以及对其的使用。 从这篇文章开始,将会介绍一些编程题来帮助我们更好的掌握单链表: 分别是反转链表、链表…

大数据技术之Hadoop集群配置

作者简介&#xff1a;大家好我是小唐同学(๑>؂<๑&#xff09;&#xff0c;好久不见&#xff0c;为梦想而努力的小唐又回来了&#xff0c;让我们一起加油&#xff01;&#xff01;&#xff01; 个人主页&#xff1a;小唐同学(๑>؂<๑&#xff09;的博客主页 目前…

SpringBoot三种方法实现定时发送邮件的案例

前言 小编我将用CSDN记录软件开发之路上所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01;也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&#xff0c;让我们共…

了解java

#常见编程语言介绍 C语言 C语言 java语言 javaScript语言 PHP语言 python语言Object-C和Swift语言 C# &#xff08;c sharp&#xff09;语言 Kotlin语言 Go语言 Basic语言 #JAVA的发展 起源于1991年SUN公司GREEN项目&#xff0c;1996年JDK1.0正式发布 后被Oracle公司收购&…

卷积神经网络CNN之ZF Net网络模型详解(理论篇)

1.背景 2. ZF Net模型结构 3. 改进优缺点 一、背景 ZF Net是用作者的名字命名的&#xff0c;Matthew D.Zeiler 和 Rob Fergus &#xff08;纽约大学&#xff09;&#xff0c;2013年撰写的论文&#xff1b; 论文原网址https://arxiv.org/abs/1311.2901 论文名&#xff1a;Vis…

Vue2的基本内容(一)

目录 一、插值语法 二、数据绑定 1.单向数据绑定 2.双向数据绑定 三、事件处理 1.绑定监听 2.事件修饰符 四、计算属性computed和监视属性watch 1.计算属性-computed 2.监视属性-watch &#xff08;1&#xff09;通过 watch 监听 msg 数据的变化 &#xff08;2&a…

IronXL for .NET 2023.2.5 Crack

关于适用于 .NET 的 IronXL 在 C# 中阅读和编辑 Excel 电子表格&#xff0c;无需 MS Office 或 Excel Interop。 IronXL for .NET 允许开发人员在 .NET 应用程序和网站中读取、生成和编辑 Excel&#xff08;和其他电子表格文件&#xff09;。您可以读取和编辑 XLS/XLSX/CSV/TS…

Apollo控制部分1-- ControlComponent组件介绍

Apollo控制部分1-- ControlComponent组件介绍摘要一、ControlComponent1、启动文件解析2、ControlComponent()组件函数解析1&#xff09;ControlComponent::ControlComponent() 构造函数2&#xff09;ControlComponent::Init() 初始化函数&#xff08;执行一次&#xff09;3&am…

分享四个前端Web3D动画库在Threejs中使用的动画库以及优缺点附地址

Threejs中可以使用以下几种动画库&#xff1a;Tween.js&#xff1a;Tween.js是一个简单的缓动库&#xff0c;可以用于在three.js中创建简单的动画效果。它可以控制数值、颜色、矢量等数据类型&#xff0c;并提供了多种缓动函数&#xff0c;例如线性、弹簧、强化、缓冲等等。区别…

Linux性能学习(2.3):内存_为什么分配的内存比申请的内存大16个字节

文章目录1 验证申请不同内存&#xff0c;系统分配机制1.1 代码1.2 测试1.3 结论2 为什么会多分配内存3 为什么会有4字节不可使用参考资料&#xff1a;https://www.gnu.org/software/libc/ 在上一篇文章中&#xff0c;探讨了Linux系统对进程以及线程的内存分配问题&#xff0c;…

流程图简介

一、流程与流程图1. 什么是流程具体来说&#xff0c;流程是一项活动或一系列连续有规律的事项或行为进行的程序。流程有6个要素&#xff0c;分别是&#xff1a;资源、过程、结构、结果、对象和价值。一个流程会把这些基本要素串联起来&#xff0c;例如流程中资源的输入、流程中…

gprof2dot perf

什么是gprof2dot 这是一个用于将许多探查器的输出转换为点图Python脚本。 使用需要安装的依赖 Python: known to work with version 2.7 and 3.3; it will most likely not work with earlier releases.Graphviz: tested with version 2.26.3, but should work fine with ot…

【C++】类和对象补充知识点

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、再谈构造函数1.1 构造函数体赋…

逻辑电路代数运算(上)

逻辑代数L是一个封闭的代数系统&#xff0c;由一个逻辑变量集K&#xff0c;常量0和1&#xff0c;以及与或非三种基本运算构成。 参与逻辑运算的变量叫逻辑变量&#xff0c;用字母A&#xff0c;B……表示。每个变量的取值非0 即1。 0、1不表示数的大小&#xff0c;而是代表两种不…