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

在 dell precision 7920 tower CentOS 8 Stream 上安裝nvidia驱动程序、Anaconda

简单记录一下如何在实验室dell precision 7920 tower CentOS 8 Stream上安装nvidia显卡驱动。

chen9046的博客 992

从安装到出图:一份给振动测试新手的LMS Test.Lab 2021完整避坑手册(含许可证更新和常见弹窗解决)

本文为振动测试新手提供LMS Test.Lab 2021的完整使用指南,涵盖安装配置、许可证更新、数据采集到频域后处理的全流程。特别针对常见弹窗错误提供解决方案,并详细讲解Colormap时频图分析技巧,帮助用户快速掌握振动数据分析核心技能。

weixin_29268331的博客 977

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

代码来自维基百科的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

英飞凌TC3xx DSADC旋变软解码实战:从示波器波形到VX1000数据,手把手教你避坑

本文详细介绍了英飞凌TC3xx系列微控制器的DSADC模块在电机旋变软解码中的实战应用。从示波器波形分析到VX1000数据采集,提供了一套完整的调试方法论,帮助工程师快速定位和解决常见问题,提升解码精度和系统性能。

weixin_30598225的博客 517

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

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

weixin_47226996的博客 975

玉米群体遗传分析实战:如何用IQtree和VCF文件快速构建系统发育树(附避坑指南)

本文详细介绍了如何利用IQtree和VCF文件进行玉米群体遗传分析,并快速构建可靠的系统发育树。文章重点解析了从VCF格式转换到PHYLIP格式的实用技巧,强调了使用ASC模型校正SNP数据偏差的重要性,并提供了完整的参数设置、常见报错解决方案及结果评估指南,帮助研究者高效完成分析并规避常见陷阱。

leaf8的博客 606

吃透 AM32 无人机电调:从源码架构到工作原理的全方位解析(附实践指南)(上)

本文深入解析了AM32电调固件的源码架构与核心模块实现。文章首先介绍了AM32电调作为开源无人机;动力心脏的重要地位,随后从硬件基础、源码目录、模块划分三个维度构建解析框架。重点剖析了系统初始化模块的时钟配置、GPIO初始化和定时器设置,以及FOC控制模块的坐标变换算法、角度估算和SVPWM生成等关键技术实现。通过逐行代码解析,揭示了电调如何将飞控指令转换为电机驱动的完整过程,为开发者理解AM32电调工作原理提供了系统性指导。

bother3000的博客 6551

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

求解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

AUTOSAR进阶图解==>AUTOSAR_SWS_COM

AUTOSAR COM模块是AUTOSAR通信堆栈的核心组件,提供信号导向的通信服务。该模块位于通信服务层,连接RTE与PDU Router,主要功能包括信号封装/提取、传输模式管理、信号路由、超时监控和字节序转换等。COM模块架构分为应用层、通信服务层和通信抽象层,包含信号管理、I-PDU处理、传输模式管理等组件。其配置结构包括顶层容器、I-PDU组、I-PDU和信号等多层次配置对象,支持丰富的参数设置。模块采用严格的状态管理机制,包括模块状态和I-PDU组状态转换,确保通信可靠性。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1242

乘法逆元

乘法逆元: 设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

Python爬虫终极实战:逆向解析+异步处理,高效爬取中关村在线万级产品数据

爬虫工程师的战场,已经从简单的HTML解析,转向了对网络协议、JavaScript执行逻辑的深度逆向工程。然后刷新页面,当浏览器发起这个请求时,执行会暂停,我们可以一步步跟蹤调用栈(Call Stack),找到发起请求前的JavaScript代码,从而发现参数的计算逻辑。它们会添加一个动态的、一次性的签名(token)或加密参数,用于验证请求的合法性。这是整个爬虫最核心、最具技术含量的部分。的请求,其响应体正是结构清晰的JSON数据,包含了当前页面的所有手机信息(产品ID、名称、价格、图片等)。

2201_76125261的博客 429

手把手教你学Simulink实例:基于Simulink的锂电池管理系统(BMS)仿真

是确保锂电池安全、高效运行的关键组件。BMS 主要功能包括监控电池的状态(如电压、电流、温度)、估算荷电状态(State of Charge, SOC)、健康状态(State of Health, SOH),以及实现电池均衡和保护机制等。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证锂电池管理系统的控制策略。常见的均衡方法包括被动均衡(通过电阻放电)和主动均衡(通过开关电容或变压器)。通过本教程,我们详细介绍了如何使用 Simulink 进行锂电池管理系统的仿真实例。

MHD0815的博客 538

数论倒数——逆元

数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 数论中的倒数是有特别的意义滴 你以为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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

逆元(数论倒数)

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

G-Howe的博客 371

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

互质版: #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

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

辗转相除法,又叫欧几里德(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、付费专栏及课程。

余额充值