Python用扩展欧几里德算法求乘法逆元

从小学数学到RSA加密:欧几里德算法(辗转相除法)的奇妙旅程与代码实战 本文探讨了欧几里德算法(辗转相除法)从小学数学到现代密码学的广泛应用。通过详细的算法解析和代码实战,展示了其在RSA加密中的关键作用,包括最大公约数计算和模逆元求解。文章还介绍了算法优化技巧及其在密码学中的实际应用场景。 阅读详情
  1. 扩展欧几里得算法求最大公约数gcd
def EX_GCD(a,b,arr): #扩展欧几里得
    if b == 0:
        arr[0] = 1
        arr[1] = 0
        return a
    g = EX_GCD(b, a % b, arr)
    t = arr[0]
    arr[0] = arr[1]
    arr[1] = t - int(a / b) * arr[1]
    return g
  1. 求乘法逆
def ModReverse(a,n): #ax=1(mod n) 求a模n的乘法逆x
    arr = [0,1,]
    gcd = EX_GCD(a,n,arr)
    if gcd == 1:
        return (arr[0] % n + n) % n
    else:
        return -1
  1. 测试代码
a = 21
b = 25
arr = [0,1,]
print(a,'模',b,'的乘法逆:',ModReverse(a,b))
print(a,'和',b,'的最大公约数:',EX_GCD(a,b,arr))
print(arr[1],'×',b,'+',arr[0],'×',a,'= 1')

输出结果:
在这里插入图片描述



Tip

EX_GCD函数的参数用一个数组中的两个元素而不用两个变量,涉及到Python中函数传参是按值传递还是按引用传递,如果用两个变量传递,则调用函数过后这个变量的值不会改变,EX_GCD函数运行结果会出现错误;数组是可变对象,用数组作为参数,则调用函数过后数组的值会改变

乘法逆元及其求解方法在后端开发中的应用 当模数m为素数时,费马小定理提供了一种求解乘法逆元的简单方法。根据费马小定理,如果a是一个不可被m整除的整数,那么a^(m-1) ≡ 1 (mod m)。根据同余的性质,我们可以得到a * a^(m-2) ≡ 1 (mod m),从而得到乘法逆元。在后端开发中,乘法逆元常常用于解决与模运算相关的问题,例如计算模意义下的除法或解决线性同余方程。本文将详细介绍乘法逆元的概念、性质以及求解方法,并提供相应的源代码实现。乘法逆元是指对于给定的整数a和模数m,存在一个整数x,使得ax ≡ 1 (mod m)。 阅读详情

相关推荐

扩展的欧几里得算法(实现求乘法逆元)

欧几里得是数论中的一个最初步的概念,它用来判断两个数的最大公因子,扩展的欧几里得能够进一步实现在两个数互素情况下的乘法可逆元。求可逆元是一些算法的基础。

欧几里得算法、扩展欧几里得算法(特解、应用、通解)

gcdabgcdbabgcdabgcdbabgcdbabgcdabgcdaba​gcdabb​最近实验中用到了仿射加解密算法,其中的解密操作是通过扩展欧几里得算法实现的,因此在这里对做一个完整的记录。

striveAgain丶的博客 1988

扩展欧几里得算法求逆元

扩展欧几里得算法求逆元

扩展欧几里得

扩展欧几里得(转载) https://www.cnblogs.com/KatouKatou/p/9818175.html

weixin_45727188的博客 225

立创开源便携式多生理参数监护仪:基于STM32H743与ADS1292R的心电血氧体温监测系统设计

本文详细解析了基于STM32H743与ADS1292R的便携式多生理参数监护仪开源设计。项目集成了心电、血氧和体温监测功能,采用模块化硬件架构,并重点介绍了利用FIR滤波和Pan-Tompkins算法进行心电信号处理的核心技术。文章提供了完整的复刻指南与避坑要点,是学习医疗电子设备设计的优秀实践案例。

weixin_30600615的博客 326

不用买机械臂!用Python+ROS仿真实现RGB-D物体抓取全流程(Gazebo/MoveIt教程)

本文详细介绍了如何利用Python和ROS仿真环境(Gazebo/MoveIt)实现RGB-D物体抓取全流程,无需购买昂贵机械臂硬件。从环境搭建、机械臂模型导入、深度视觉系统配置到MoveIt运动规划,提供完整的实战指南,特别适合个人开发者和学生团队进行机械臂抓取算法验证与开发。

weixin_29061041的博客 340

扩展欧几里得算法与模乘逆元的程序

代码来自维基百科的Extended Euclidean algorithm。 扩展欧几里得算法程序: function extended_gcd(a, b) s := 0; old_s := 1 t := 1; old_t := 0 r := b; old_r := a while r ≠ 0 quotient := old_r

海岛Blog 2142

Windows11 升级到24H2后,原本的protel99se软件的DDB图纸文件打不开解决办法

Windows11更新后无法打开DDB文件

xingchen2837的博客 413

密码学之欧几里德拓展算法 python代码实现

欧几里德拓展算法的python实现

weixin_47226996的博客 975

说一说系统/子系统规格说明

《系统/子系统规格说明》都是从用户的角度以软件的维度来描述系统的功能、性能、业务流程、数据流和控制流等,并描述内外部接口需求、资源使用情况等.

weixin_40725543的博客 5428

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

shuyisuisuinian的博客 2万+

(扩展)欧几里得算法的应用

求解a,b的gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 求解ax+by=gcd(a,b); int e_gcd(int a,int b,int &x,int &y){ if(!b){ x=1;y=0; return a; } int gcd=e_gcd(b,a%b,y,x); y-=a/b*x; ...

summer20020929的博客 446

使用 Python 获取网络数据

本文介绍了 Python 获取网络数据、使用 requests 库、编写爬虫代码以及使用 IP 代理的方法。Python 的 requests 库非常方便,可以帮助我们快速访问网络资源。编写爬虫程序需要掌握正则表达式、HTTP 协议等知识,同时需要注意爬取速度和频率,以避免对被爬取网站造成负担。最后,使用 IP 代理可以帮助我们隐匿身份,保护我们的网络安全。

互联说 2695

乘法逆元

乘法逆元: 设ax≡1%b,则称x为a关于模b的乘法逆元。   Q:为什么要使用乘法逆元呢? A:假设要求(a/b)%c,a非常大(求出a的过程超出整型范围)无法直接求出值,所以希望可以想但是除法没有对应的模算术,所以出现了乘法逆元。 证明: 设bx≡1%c,则b*x=p*c+1得x=(p*c+1)/b 把x带入(a*x)%c中, 变为 [a*(p*c+1)/b]%c =[(a*

q437634645的博客 337

基于CANopen协议,实现机器人500-1000Hz高频控制(附实操实例) (1)

基于CANopen协议实现机器人500-1000Hz高频控制,核心不是“协议本身的性能极限”,而是“通过优化配置、硬件适配、软件调优,最大化发挥协议的实时性优势”。关键在于:以PDO为核心实现实时数据传输,以SYNC帧锁定高频同步周期,以精简冗余、优化硬件降低总线负载,同时通过实操调试解决周期漂移、延迟、干扰等问题。

start_up_go的博客 91

手把手教你学simulink(8.2)--simulink的实战案例:信号分析

通过以上步骤,你已经成功使用 Simulink 对信号进行了频谱分析和时域分析,提取了信号的有用信息。这个案例展示了如何创建 Simulink 模型、添加和连接模块、设置仿真参数、运行仿真以及分析结果。希望这个案例能帮助你更好地理解和使用 Simulink 进行信号分析。

MHD0815的博客 1123

数论倒数——逆元

数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 数论中的倒数是有特别的意义滴 你以为a的倒数在数论中还是1/a吗 (・∀・)哼哼~天真   先来引入求余概念   (a +  b) % p = (a%p +  b%p) %p  (对) (a  -  b) % p = (a%p  -  b%p) %p  (对) (a  *  b) % p = (a%p *  b%p) %p  (对) (a

cross_yan的博客 1294

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

逆元(数论倒数)

今天听师哥讲逆元,感觉有点难啊,不过,初中生都这么厉害了吗! 数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 数论中的倒数是有特别的意义滴 你以为a的倒数在数论中还是1/a吗 (・∀・)哼哼~天真   先来引入求余概念   (a +  b) % p = (a%p +  b%p) %p  (对) (a  -  b) % p = (a%p  -  b%p) %p  (对) ...

G-Howe的博客 371

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

扩展欧几里得、求乘法逆元及其应用、中国剩余定理(互质版和非互质版)、欧拉函数、快速判素数模板

互质版: #include #include #include using namespace std; typedef __int64 int64; int64 a[15],b[15]; int64 Extend_Euclid(int64 a, int64 b, int64&x, int64& y) { if(b==0) {

林下的码路 1853

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

辗转相除法(欧几里得算法)

辗转相除法,又叫欧几里德(Euclidean)算法, 是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。 计算公式gcd(a,b) = gcd(b,a mod b)。 算法简介: 欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著作《The Elements》中最早描述了这种算法,...

upc_miao的博客 5312

大数据安全 | 【实验】RSA加密解密

RSA加密解密

知识库搭建ing 745

扩展欧几里得算法

乘法逆元 定义: 满足a*k≡1 (mod p)的k值就是a关于p的乘法逆元。为什么要有乘法逆元呢? 当我们要求(a/b) mod p的值,且a很大,无法直接求得a/b的值时,我们就要用到乘法逆元。 我们可以通过求b关于p的乘法逆元k,将a乘上k再模p, 即(a*k) mod p。其结果与(a/b) mod p等价。证:(其实很简单。。。) 根据b*k≡1 (mod p)有b*k=p...

weixin_30627341的博客 98

python莫比乌斯内接矩形_使用 Python 爬取洛谷所有算法标签

(说明:此办法只适用于 P 系列题目。且本文章追求的是代码简单而不是效率高。)(若本篇文章有哪些不当之处,请各位大佬不吝批评、指正。)2018.2 更新:现在洛谷已经公开所有算法标签,有更简单的获取方法。但是此文爬虫稍作一行修改即可统计算法频率。1. 观察算法标签的特点首先,进入洛谷的题目列表,并单击右侧的「显示所有算法标签」按钮,显示出每道题目的算法标签。通过观察,我们不难发现,所有的算法标签都...

weixin_39770226的博客 691

【古典密码】 凯撒密码 移位变换 仿射变换 多表代换 Python

本文附有丰富的代码,故文章冗长,请对照目录查阅,各大板块均有上下文提示 目录 古典密码简介 移位变换: 多表代换: 加密算法思路 仿射变换加密 多表代换加密 例题:仿射变换 例题:多表代换 古典密码简介 古典密码主要有置换和代换的方法。置换:字母重新排列,字母本身不变,但其位置改变了(凯撒密码、移位变换)。代换:将明文中的字符替代成其他字符(仿射变换、多表代换)。 在线性空间的变化中,古典加密就是移动并拉伸物体,让物体变得与原来不一样;解密解释将物...

Herk 的博客 4765

【公钥密码】RSA 算法加解密 公钥密码体制 Python

1.依赖的基本数学算法、编码流操作 # 本代码文件名: __util.py import math def gcd(x, y): """ 欧几里德算法 """ while x > 0: x, y = y % x, x return y def extendGcd(a, b): """ 扩展欧几里德算法 """ if b == 0: return 1, 0 else: x, y = extendGcd(b, a % b) x, y = y, x - (a//b) *

Herk 的博客 1348
上一篇: PHP学习过程中的脑子进的水
下一篇: Python学习过程中的脑子进的水
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值