信息安全与数学基础-笔记-②同余

news2024/11/16 23:36:58

知识目录

  • 同余
  • 完全剩余系
    • 剩余类
    • 完全剩余系
  • ❀简化剩余系❀
    • 欧拉函数
  • 逆元
    • !欧拉定理 !

同余

a,b 两个数字,都模m,当两个数字模m后余的数一样即为同余。
例子:
a = bq + r (mod m),这里的a 和 r 就是同余 ,因为a模m就是余r的

  • 同余性质:若 m | a-b 则 a 和 b 同余 m,同余符号用三横线表示

  • 传递性:若:a b同余 ,b c 同余,那么a和c就同余

  • 倍数原则:a和b模m同余,则a = km + b
    解释:同余中玩的也是余数,所以当模m余数相同的时候,不管你添加多少个m都是同余的结果

  • 加法原则:a b 同余,c d 同余,则a + c 和 b + d也同余
    解释:原因是因为a 和 b的余数是相同的,只要两边添加相同的数字便不会改变ab之间还是同余的关系,那么上面添加的是 c 和 d,明显cd本身就是同余,也就是说ab添加的不是cd而是cd的余数,他们的余数是一样的,也就是两边添加后还是同余的结果。

  • 乘法原则:a b 同余,c d 同余,则a × c 和 b × d也同余
    解释:同理,本质是用余数进行运算,所以相乘也是两边乘以同一个数字后还是同余的。
    注意:乘法成立,除法不成立

  • 乘法原则推论:a b 模m同余,则:na 和 nb同余,n为任意整数
    解释:余数同乘则不变

  • 指数原则:若ab同余,则: a n a^n an b n b^n bn也同余
    解释:因为a和b同余,次方数也一样,个数一样的a和b相乘,其实也就是和乘法原则一样,所以指数原则只要次方数一样也是同余。

  • 单独原则:a + b mod m == a mod m + b mod m 或者 当ab同余的时候,na和nb在判断是否同余的时候,也可以单独先对ab分开取模,例如:n (a mod m) = n (b mod m)
    解释:在一个求模式子中,可以单独拆开来分别先取模,同理在乘法中也一样,两个数字相乘,也可以单独拆开来分别取模,这和十进制运算也是一样的道理。

  • 同除原则:若ad 和 bd 模 m同余,(d,m) = 1,则:a 同余 b
    解释:上面的乘法原则提到除法不行,但是这里又可以?因为这里的d是和m互素的,所以我们可以用单独原则,将两边的d进行先取模,最后得到一个1和ab相乘,所以最后得出ab是同余的,所以在希望通过除法对数字简化的时候必须要保证两边的数字能够提取出来的公因数是与m互素的才能够保证之后的数字仍为同余。

  • 若ab模m同余 ,取k,k>0,则:同乘k后ak bk 模mk仍然同余
    解释:这里的k并没有考虑是否和m互素或者与其他数字有什么联系,我们不考虑这些关系后把m也同时乘k,这时候当我们再把ak取模的时候会把k一同消去,留下的只有a的余数,同理bk也是留下了b的余数,那么就和原本的ab模m同余一样了。对比上面同乘原则这里更多的是考虑整体,而同乘原则考虑的是余数之间,因为同余的余数相等,同乘k是依旧同余,但余数余数不一样了,变成了k倍了,但是这里是整体乘k,取模的时候是整体模k,所以,模完之后的余数仍然和原本的ab模m后的余数使用一样的,因此这两个定理是不一样的

  • 若ak bk 模mk同余,则:a b 模 m同余
    解释:其实是上一条定理的推论,但是要把模数也除,因为这里的k并没有和模数mk互素,因此也要都除。为什么不叫同除:因为同的意思是同余的两个数的同除,不关模数的事情,但这里把模数也除了,所以不叫同除原则了(好牵强的解释)。
    把ak bk mk换成c d e,那么推论就是:cd模e同余,那么c/k d/k 模e/k同余

  • 假如:a b (mod m1) ,a b (mod m2)
    那么求出m1,m2的最小公倍数为 G
    则:a b (mod G) 同余。
    (PS:这里的定理在后面的方程组中,如果发现一个数字可以拆分成m1,m2,mi…相乘,并且两两互素的时候就可以减少计算量)

  • 总结
    “同”的字眼一般是对同余符号两边的数字进行操作,和模数没有关系
    因此:同乘k模m仍旧同余,但余数若没有超出模数大小就变成了余数的k倍。同除就是能将两边的数提取公因数,并且该公因数需要和模数互素才可以同除。
    以下说的就是和模数有关的,当两边的数和模数都能提取出一个公共的公因数就可以一并提取,也可以无缘无故的同时乘一个k数进去,涉及到模数改变的,一般改变之后,和原本的式子的余数一样。

完全剩余系

完全剩余系是由剩余类中的数字组成的。
是等于模m中 ,0~m-1的数字就是完全剩余系,即两两不同余。

剩余类

模m后,每一个数字都不会大于m,那么在0~m-1个数字中,每个数字代表了一个剩余数字,因为在模的世界里, 比如1模m余数为1,也就是剩余为1的一类,当1加上模数m的时候,再去模m后还是1,所以余数为1的数字很多,把这些数字统一起来叫余数为1的剩余类
设:
C 0 C_0 C0 代表余数为0的一类
C 1 C_1 C1 代表余数为1的一类
C 2 C_2 C2 代表余数为2的一类
C 3 C_3 C3 代表余数为3的一类,以此类推
这就是剩余类,剩余类有m个,范围是[0, m-1]

  • 剩余类之间的关系
    ①每个数字都同余
    ②剩余类内的数字可以是无限大,只要是余数和剩余类内其他数字同余即可
    ③剩余类内任意取出一个数,该数叫做该类的剩余

完全剩余系

模m后,我们在每一个剩余类中取出一个数字来组成一个整体,那么该整体就叫做完全剩余系。

  • 完全剩余系之间的关系
    ①每个数字之间都不同余
    ②每个数字模m后组成0~m-1的数字
    ③该系中的数字可以无限大,只要不和其他数字同余即可

完全剩余系的性质

  • 若**(a,m) = 1**,设 r 0 r_0 r0, r 1 r_1 r1, r 2 r_2 r2 r m r_m rm为模m的一个完全剩余系
    那么:a r 0 r_0 r0 + b, a r 1 r_1 r1 + b, a r 2 r_2 r2 + b, … a r m r_m rm + b, 仍然是模m的一个完全剩余系,该性质完全就是应用了同余知识,当a和m互素的时候就能够将原本的数字改变后仍和原来的数字是同余的,所以在完全剩余系中都不同余的数字,每一个数字改变后其实还是和原来的数字是一样的,所以其实还是原来的剩余系没有改变,仍旧是都不同余的数字,只是数字本身进行了一些变化,其他数字也会跟着变化,所以剩余系还是那个剩余系。
  • 完全剩余系的应用
    在这里插入图片描述
    解释该定理是如何操作的:
    一:随便找出两个互素的正整数的完全剩余系,设两个数: m 1 m_1 m1 m 2 m_2 m2
    二:说明:待会公式中, x 1 x_1 x1 x 2 x_2 x2 会分别 遍历 m 1 m_1 m1 m 2 m_2 m2的完全剩余系
    (x1遍历m1,x2遍历m2)
    三:公式: x 1 x_1 x1× m 2 m_2 m2 + x 2 x_2 x2× m 1 m_1 m1 ,其中 x 1 x_1 x1 x 2 x_2 x2就开始遍历
    四:遍历得到的多个数字, x 1 x_1 x1× m 2 m_2 m2 + x 2 x_2 x2× m 1 m_1 m1 其实就是模 m 1 m_1 m1× m 2 m_2 m2的完全剩余系。

❀简化剩余系❀

简化剩余系就是在完全剩余系中找出与模数m互素的剩余类,将其留下来组成的整体就是简化剩余系。
举例:模数为8的时候
C 1 C_1 C1 C 3 C_3 C3 C 5 C_5 C5 就是模8的简化剩余系,其他剩余类中的0 2 4都不是和8互素的

欧拉函数

模m的简化剩余系中的个数,叫做欧拉函数: ϕ \phi ϕ(m)
其他运算和简化剩余系一样,一些简单的运算后保证还是简化剩余系即可。

  • 若p为素数, ϕ ( p ) \phi(p) ϕ(p) = p - 1
  • 若mn互素,即(m,n) = 1,则 ϕ \phi ϕ(mn) = ϕ \phi ϕ(m) ϕ \phi ϕ(n)
  • 若p为素数, ϕ \phi ϕ( p a p^a pa) = p a p^a pa - p a p^a pa − ^- 1 ^1 1
  • 若p,q为素数,并且n = p×q,则 ϕ \phi ϕ(n) = (p-1)(q-1)

  • 欧拉函数求解通式
    设n为欧拉函数的参数
    求出n的标准分解式:n = p 1 p_1 p1 a ^a a 1 ^1 1× p 2 p_2 p2 a ^a a 2 ^2 2× p 3 p_3 p3 a ^a a 3 ^3 3
    则: ϕ \phi ϕ(n) = n × (1- 1/ p 1 p_1 p1 ) × (1- 1/ p 2 p_2 p2 ) × (1- 1/ p 3 p_3 p3 )
    欧拉函数求解的通式十分重要

逆元

设:(a,m) = 1,a× a − a^- a 1 mod m
a − a^- a就是a的逆元,相当于分数中的倒数,一个数乘以他的倒数就等于1,在同余中同理,当一个数乘以逆元,就同余1.
如何求逆元:
对(a,m)使用欧几里德算法后使用裴蜀等式算出s和t,也就是sa + tm = 1后,很明显,要找a的逆元就是s,因为tm模m后是0,只剩下sa = 1所以逆元就是s

!欧拉定理 !

欧拉定理必须要记住,在后续解方程或者计算高次幂的数字时候能大大减少计算量。

  • a ϕ a^\phi aϕ ( ^( ( m ^m m ) ^) ) 1 (mod m)

费马小定理
a p a^p ap − ^- 1 ^1 1 1 (mod p)
解释:其实就是应用了欧拉定理中的方法,当p是素数的时候 ϕ ( p ) \phi(p) ϕ(p) = p-1


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

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

相关文章

如何使用Unity3d实现多人对战联机游戏

所需资源 课程来源(请支持正版课程) 安装Unity Hub 安装Visual Studio 角色模型 环境准备 ①Unity设置 不设置的话编写有些代码没有自动补全 点开 Preferences 选择 visual studio ②角色导入 点击 windows—>Package Manager 左上角 My Ass…

数据结构与算法(七):排序算法

排序算法是《数据结构与算法》中最基本的算法之一,排序算法可以分为内部和外部排序。 内部排序:数据记录在内存中进行排序。 外部排序:因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常…

xgboost:分割Sparsity-aware Split Finding

Sparsity-aware Split Finding1 在许多现实问题中,输入xxx是稀疏的是很常见的。造成稀疏性的可能原因有很多: 1)数据中存在缺失值; 2)统计中频繁出现零项; 3)特征工程的处理结果,如独热编码。 重要的是使算法意识到数据中的稀…

RocketMQ5.1.0单机安装与启动

RocketMQ单机安装与启动系统要求下载地址安装步骤RocketMq启动NameServer查看是否启动成功启动BrokerProxy查看是否启动成功修改tool.sh测试消息产生消息的消费关闭服务器系统要求 下载地址 官网下载地址 二进制包是已经编译完成后可以直接运行的,源码包是需要编译…

javaWeb核心02-RequestResponse

文章目录Request&Response1,Request和Response的概述2,Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式基于上述理论,request对象为我…

python:使用 Jupyter notebook(测试 matplotlib 和 opencv)

环境: window1python 3.10.6 参考: https://jupyter.org/https://opencv.org/ 一、创建虚拟环境 这个步骤可以跳过(因为笔者不喜欢在全局环境安装任何东西,所以搞一个新环境)。 先选中一个目录:D:\jackl…

论文笔记 | Conducting research in marketing with quasi-experiments

这篇论文是Journal of Marketing上的论文,讲了使用准实验来进行论文研究的一些事项。外生性识别的来源、几种准实验方法的注意点还有内生性的解决。 这篇论文对于准实验或者是平常论文的展开有一个非常友善的指导功能,可以阅读~ 摘要:本文旨…

多线程实现的三种方法、线程名称的获取

文章目录多线程实现的三种方法1、通过继承Thread,并重写里面的run()方法2、实现Runnable接口,并重写其中run()方法将runnable类传递给Thread类中3、实现Callable接口,重写其中的call()方法Callable接口时有泛型的,该泛型值call()方…

字符串模式匹配,经典KMP算法你还不会?我可不允许你不会!

文章目录重点1. 简单模式匹配算法2. 部分匹配值PM的算法(Move j-1 PM[j-1])3. 部分匹配值PM的两次改进(Move j-next[j])4. 快速得到next数组5. KMP匹配算法重点 童鞋们看网上讲解的时候一定要分清楚序列是从0开始还是从1开始&…

大数据框架之Hive:第1章 Hive入门

1.1 什么是Hive 1)Hive简介 Hive是由Facebook开源,基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。 那为什么会有Hive呢?它是为了解决什么问题而诞生的呢? 下…

性能优化|记一次线上OOM问题处理

概述最近线上监控发现 OOM 涨幅较大,因此去尝试定位和修复这个问题,在修复了一些内存泄漏和大对象占用问题后, OOM 依旧未达到正常标准,在这些新上报的 hprof 文件中,发现几乎所有 case 中都有个叫 FinalizerReference 的对象&…

集合体系概述以及Collection集合常用API

一. 集合 集合与数组类似,都是一种容器。集合是Java中存储对象数据的一种容器。集合也被称为对象容器。 数组的特点 集合的特点 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球,可大可小。集合非常适合…

python与pycharm从零安装

python(解释器)下载地址:Welcome to Python.orgpycharm(编译器)下载地址:PyCharm: the Python IDE for Professional Developers by JetBrains一、python的下载与安装到官网后根据步骤下载安装包后&#xf…

xgboost:分割查找:Weighted Quantile Sketch

Weighted Quantile Sketch 专门处理流式和分布式加权数据集的一种分桶的方法 近似算法的一个重要步骤是提出候选分裂点。通常使用特征的百分位数来使候选数据均匀分布。形式上,设Dk(x1k,h1),(x2k,h2)⋅⋅⋅(xnk,hn)D_k {(x_{1k}, h_1),(x_…

Redis持久化:RDB、AOF

Redis持久化一. RDB(1) save(2) bgsave(3) 总结二. AOF(1) 重写优化(2) RDB和AOF的区别引入:Redis用内存存储数据,有数据丢失的问题; 一. RDB RDB(Redis Database Bcakup file)即Redis数据备份文件,或Red…

如何用 Python采集 <豆某yin片>并作词云图分析 ?

嗨害大家好鸭!我是小熊猫~ 总有那么一句银幕台词能打动人心 总有那么一幕名导名作念念不忘 不知道大家有多久没有放松一下了呢? 本次就来给大家采集一下某瓣电影并做词云分析 康康哪一部才是大家心中的经典呢? 最近又有哪一部可能会成为…

拉链表详解

目录 一、拉链表概念 二、拉链表对应的业务需求 三、代码实现 3.1 数据初始化: 3.2 创建ods层增量表: 3.3 创建dwd层拉链表 3.4 数据更新 ,将数据日期为2023-3-4的日期添加到拉链表中 3.4.1 先追加数据到ods层表 3.4.2 更新dwd层表数据 …

【SpringCloud】SpringCloud详解之Ribbon实战

目录前言SpringCloud Ribbon 负载均衡一需求二.RestTemplate远程调用配置负载均衡(order服务内修改)三.Ribbon实现负载均衡的原理四.Ribbon负载均衡策略1.负载均衡种类2.配置负载均衡(order服务中配置)五.Ribbon的饥饿加载配置(在order服务配置)前言 微服务中比如用户服务部署…

sklearn使用入门

文章目录1.机器学习1.1 机器学习简介1.2 有监督学习(supervised learning)1.3 无监督学习(unsupervised learning)1.4 半监督学习2. 机器学习工具SKlearn2.1 sklearn2.2 sklearn常用模块2.2.1 分类2.2.2 回归2.2.3 聚类2.2.4 降维2.2.5 模型选择2.2.6 数据预处理2.3 sklearn使用…

Android startActivityForResult()废弃了,代替方案案例

安卓项目compileSdk为32,在使用startActivityForResult()方法时发现Android studio提示此方法已经废弃了。 目前的代替方案案例。 // 确保 app 的 build.gradle中已经引入了androidx.appcompat:appcompat dependencies {implementation androidx.appcompat:appcomp…