数据校验学习笔记 ———— 模逆运算

文章目录

介绍

非零实数 a ∈ R a \in R a∈R的乘法你愿就是它的倒数 a − 1 a^{-1} a−1,类似的,数论中也可以定义一个整数a在模m意义下的逆元 a − 1 m o d    m a^{-1} \mod m a−1modm,或简单地记作 a − 1 a^{-1} a−1,这既是模逆元(Modular Multiplicative Inverse),也称作数论倒数。模逆元存在的充要条件是a和m互质,即
g c d ( a , m ) = 1 gcd(a, m) = 1 gcd(a,m)=1

算法

是否存在模逆元

对于是否存在模逆元,可以通过欧几里得算法判断两个数(a,m)是否互质。计算方式如下:
m = q 1 × a + r 1 a = q 2 × r 1 + r 2 r 1 = q 3 × r 2 + r 3 ⋯ ⋯ r k − 2 = q k × r k − 1 + 1 r k − 1 = q k + 1 × 1 + 0 \begin{align} m & = q_1 \times a + r_1 \\ a & = q_2 \times r_1 + r_2 \\ r_1 & = q_3 \times r_2 + r_3 \\ \cdots & \cdots \\ r_{k-2} & = q_k \times r_{k-1} + 1 \\ r_{k-1} & = q_{k+1} \times 1 + 0 \end{align} mar1⋯rk−2rk−1=q1×a+r1=q2×r1+r2=q3×r2+r3⋯=qk×rk−1+1=qk+1×1+0

流程执行按照使用大数除以小数,不断取余,直到余数为0。

如何求取模逆元

使用回代思想,把 1 表示成 a 和 m 的组合。起始位从余数=1(上述式子中的式5)开始进行反推,然后不断把较小的余数用上一行式子替换。演算过程如下:
1 = r k − 2 − q k × r k − 1 1 = r k − 2 − q k × ( r k − 3 − q k − 1 × r k − 2 ) 1 = ⋯ 1 = s × m + t × a \begin{align} 1 & = r_{k-2} - q_k \times r_{k-1} \\ 1 & = r_{k-2} - q_k \times (r_{k-3} - q_{k-1} \times r_{k-2}) \\ 1 & = \cdots \\ 1 & = s \times m + t \times a \end{align} 1111=rk−2−qk×rk−1=rk−2−qk×(rk−3−qk−1×rk−2)=⋯=s×m+t×a

对于式中, s × m s \times m s×m 的模运算为0,则只需要对进行 t × a t \times a t×a,其中,就是候选逆元。如果候选逆元为负数,则需要加m的整数倍,保障逆元的取值范围为[0, m)。

示例

示例1

a = 15,m = 32,求解15在mod 32 下的模逆元。

是否互质

32 = 2 × 15 + 2 15 = 7 × 2 + 1 2 = 2 ∗ 1 + 0 \begin{align*} 32 & = 2 \times 15 + 2 \\ 15 & = 7 \times 2 +1 \\ 2 & = 2*1 + 0 \end{align*} 32152=2×15+2=7×2+1=2∗1+0

根据上述运算,我们判断15与32互质。存在模逆元。

模逆元求解

1 = 15 − 7 × 2 1 = 15 − 7 × ( 32 − 2 × 15 ) 1 = 15 − 7 × 32 + 14 × 15 1 = 15 × 15 − 7 × 32 \begin{align*} 1 & = 15 - 7 \times 2 \\ 1 & = 15 - 7 \times (32- 2 \times 15) \\ 1 & = 15 - 7 \times 32 + 14 \times 15 \\ 1 & = 15 \times 15 - 7 \times 32 \end{align*} 1111=15−7×2=15−7×(32−2×15)=15−7×32+14×15=15×15−7×32

− 7 × 32 - 7 \times 32 −7×32 在mod 32 的运算下为0,且 15 ∈ [ 0 , 32 ) 15 \in [0, 32) 15∈[0,32),则可以判定为15在mod 32的模逆元为15本身。

求算模逆元正确性

15 × 15 = 225 = 7 × 32 + 1 15 \times 15 = 225 = 7 \times 32 +1 15×15=225=7×32+1

示例2

a = 8,m = 49,求解8在mod 49 下的模逆元。

是否互质

49 = 6 × 8 + 1 8 = 8 × 1 + 0 \begin{align*} 49 & = 6 \times 8 + 1 \\ 8 & = 8 \times 1 + 0 \end{align*} 498=6×8+1=8×1+0

根据上述运算,我们判断8与49互质。存在模逆元。

模逆元求解

KaTeX parse error: Expected 'EOF', got '&' at position 3: 1 &̲ = 49 - 6 \time...

49 在mod 49 的运算下为0,因为 − 6 ∉ [ 0 , 49 ) -6 \notin [0,49) −6∈/[0,49),所以-6不为8在mod 49 下的模逆元。此时,我们需要进行m(49)的运算, − 6 + 49 = 43 -6 + 49 =43 −6+49=43,则可以判定为8的在mod 49 模逆元为43。

求算模逆元正确性

8 × 43 = 344 = 7 × 49 + 1 8 \times 43 = 344 = 7 \times 49 +1 8×43=344=7×49+1

相关推荐
xqqxqxxq10 分钟前
多线程、进程与JVM 技术笔记
jvm·笔记
万古长歌18 分钟前
CSDN年度技术趋势预测
笔记
Jul1en_26 分钟前
【SpringCloud】Eureka、Nacos 简单概念笔记
笔记·spring cloud·eureka
LuminousCPP30 分钟前
C 语言动态内存管理全解析:从基础函数到柔性数组与内存分区
c语言·经验分享·笔记·学习·柔性数组
d111111111d1 小时前
MQTT+STM32+ESP8266网络程序分层+韦老师
笔记·stm32·单片机·嵌入式硬件·学习·php
得闲喝茶1 小时前
SQL处理数据的常用语法语句
数据库·笔记·sql·数据分析·excel
糖炒栗子03261 小时前
最小二乘优化笔记:从损失函数、正则项到 BA / 图优化
人工智能·笔记·机器学习
nnsix1 小时前
Unity HybridCLR 笔记
笔记·unity·游戏引擎
sbjdhjd2 小时前
Docker 网络工业级实战手册
linux·运维·经验分享·笔记·docker·云原生·云计算
Flittly2 小时前
【日常小问】解决 Jenkins 部署 Spring Cloud 微服务到 Docker 容器启动失败的问题
运维·笔记·docker·微服务·jenkins