欧几里得算法求解乘法逆元——Python
来源:互联网 发布:崩坏学园漫画淘宝 编辑:程序博客网 时间:2024/05/21 06:00
刚刚学习密码,老师让使用欧几里得算法来求解一下乘法逆元,因此,就顺道学习了一下。
(1)欧几里得算法,大体就是递归求解两个数的最大公约数,在本程序中它的作用就是求a,b的最大公约数,若是最大公约数不为0则判断,a关于b,或者b关于a的逆元是不存在的,否则就可以继续进行下去,具体欧几里得算法可以看百度百科中介绍的很是详细;
欧几里得算法
(2)扩展的欧几里得算法,求得是 a*x + b*y = gcd 的通解 x 和 y,主要的是x = y1,y = x1 – a/b*y1,也是递归实现的,x,y的求解依赖于递归回的x1,y1的值,在本程序中,扩展的欧几里得算法就是来求线性方程的x与y的;
扩展欧几里得算法博文
(3)在欧几里得与扩展欧几里得算法的基础上,可以求解乘法的逆元,逆元的概念就是我理解的很简单,ax≡1 mod f,大体就是这个式子,最后求得的x就是a关于模f的逆元,这个式子可以转换为:ax + fy = 1,这样的话就可以使用扩展的欧几里得算法来求解x了,而要求f关于模a的逆元是,逆元就是y。例如 5x + 14y = 1,在使用扩展的欧几里得算法求得的结果是:x = 3, y = -1,这样就可以得到,5关于模14的逆元是3,而14关于模5的逆元就是-1,因为逆元不能是负数,所以当逆元为负数是要进行模5运算,而在python2.7后,%运算直接就是模运算,因此很是方便,所以最终14关于模5的逆元就是-1 + 5 = 4;
乘法逆元
python中的负数逆元
(4)最后就是我自己使用python编程实现求解乘法逆元的代码,有任何问题希望各位可以指正讨论。
#欧几里得算法求最大公约数def get_gcd(a, b):k = a // bremainder = a % bwhile remainder != 0:a = b b = remainderk = a // bremainder = a % breturn b#改进欧几里得算法求线性方程的x与ydef get_(a, b):if b == 0:return 1, 0else:k = a // bremainder = a % bx1, y1 = get_(b, remainder)x, y = y1, x1 - k * y1return x, ya, b = input().split()a, b = int(a), int(b)#将初始b的绝对值进行保存if b < 0:m = abs(b)else:m = bflag = get_gcd(a, b)#判断最大公约数是否为1,若不是则没有逆元if flag == 1:x, y = get_(a, b)x0 = x % m #对于Python '%'就是求模运算,因此不需要'+m'print(x0) #x0就是所求的逆元else:print("Do not have!")
阅读全文
0 0
- 欧几里得算法求解乘法逆元——Python
- ZOJ3609——数论基础 扩展欧几里得求解乘法逆元
- 扩展欧几里得算法求乘法逆元
- 【专题】欧几里得算法、扩展欧几里得、乘法逆元
- 乘法逆元(扩展欧几里得)
- 拓展欧几里得/乘法逆元
- 51nod 1256 乘法逆元(扩展欧几里得算法)
- 乘法逆元的求解
- hdu 1576 A/B (求乘法逆元——扩展欧几里得)
- csu1163扩展欧几里得之乘法逆元
- 乘法逆元与扩展欧几里得
- 乘法逆元的扩展欧几里得解法
- 扩展欧几里得(乘法逆元)
- 扩展欧几里得求乘法逆元
- 拓展欧几里得和乘法逆元
- 乘法逆元+扩展欧几里得+Lucas
- 扩展欧几里得求乘法逆元
- 扩展欧几里得 与 乘法逆元
- opencv3/C++基于颜色的目标跟踪
- [后缀数组] BZOJ4650: [Noi2016] 优秀的拆分
- Android 封装工具类之文件缓存
- 字符编码简介:ASCII,Unicode,UTF-8,GB2312及Unicode和UTF-8如何转化
- TortoiseSVN报错:“Previous operation has not finished; run 'clean up' if it was interrupted“ 的解决方法
- 欧几里得算法求解乘法逆元——Python
- cocos2dx :多场景切换过程中的生命周期变化
- JavaScript更新日志(5)
- springboot+Rabit实战二:(Rabbit MQ web 界面管理)
- java--集合案例
- UCOS_II学习笔记---信号量管理之信号量的使用
- 用c#批量新建空的文件夹
- 实用网站记录(持续更新中...)
- Unity3D Note