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

文章目录

介绍

非零实数 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

相关推荐
大连好光景2 小时前
软件测试笔记(1)
笔记·功能测试·测试工具
Hammer_Hans2 小时前
DFT笔记33
笔记
宵时待雨2 小时前
C++笔记归纳17:哈希
数据结构·c++·笔记·算法·哈希算法
山川行3 小时前
Python快速闯关8:内置函数
java·开发语言·前端·笔记·python·学习·visual studio
鸟电波3 小时前
硬件笔记——立创EDA的模块复用
笔记
今儿敲了吗3 小时前
算法复盘——前缀和
笔记·学习·算法
啊我不会诶4 小时前
最小生成树
c++·笔记·学习·算法
老虎06274 小时前
LeetCode热题100 刷题笔记(第三天)链表 「两数相加」
笔记·leetcode·链表
笑鸿的学习笔记4 小时前
git笔记之--abort和--quit参数详解
笔记·git