博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展欧几里得算法
阅读量:4316 次
发布时间:2019-06-06

本文共 853 字,大约阅读时间需要 2 分钟。

定义

  设a和b不全为0,则存在整数x和y,使得a*x + b*y = gcd( a, b) = d,其中d为最大公约数。

实现原理

  对于gcd( a, b) = d,用辗转相除法可以得到gcd( d, 0),此时把a = d,b = 0代入a*x + b*y  = d中可以得到x = 1,y为任意值。现在将该过程进行逆推,以满足任何情况下的a*x  + b*y = d:

  方程a*x + b*y = d经过对a,b的一次辗转相除之后原方程变为b*x + (a%b)*y = d,将此式展开有b*x + (a -[ a/b]*b)*y = d (其中[a/b]代表a/b向下取整),合并同类项之后可得 a*y + b*(x – [a/b]*y) = d,那么若b*x + (a%b)*y = d的解为 x = X,y = Y,那么对于a*x + b*y = d的解则为x = Y,y = X – [a/b]*Y。

 现给出一个表对以上结论予以验证:

实现代码如下:

1 long long ExtendedEuclid(long long a,long long b,long long& d,long long& x,long long& y) 2 { 3     long long tmp; 4     if(b == 0) 5     { 6         x = 1; 7         y = 0; 8         d = a; 9     }else10     {11         ExtendedEuclid(b,a%b,d,x,y);12         tmp = x;13         x = y;14         y = tmp - (a / b) * y;15     }16 }

 应用

1.求解不定方程

2.求解模的逆元

3.求解同余方程

 

转载于:https://www.cnblogs.com/heweiyou1993/p/3301873.html

你可能感兴趣的文章
HUT-XXXX Strange display 容斥定理,线性规划
查看>>
mac修改用户名
查看>>
一道关于员工与部门查询的SQL笔试题
查看>>
Canvas基础
查看>>
[Hive - LanguageManual] Alter Table/Partition/Column
查看>>
可持久化数组
查看>>
去除IDEA报黄色/灰色的重复代码的下划波浪线
查看>>
Linux发送qq、网易邮件服务配置
查看>>
几道面试题
查看>>
【转】使用 WebGL 进行 3D 开发,第 1 部分: WebGL 简介
查看>>
js用正则表达式控制价格输入
查看>>
chromium浏览器开发系列第三篇:chromium源码目录结构
查看>>
java开发操作系统内核:由实模式进入保护模式之32位寻址
查看>>
第五讲:单例模式
查看>>
Python编程语言的起源
查看>>
Azure ARMTemplate模板,VM扩展命令
查看>>
使用Masstransit开发基于消息传递的分布式应用
查看>>
[CF808A] Lucky Year(规律)
查看>>
关于推送遇到的一些问题
查看>>
寒假作业3 抓老鼠啊~亏了还是赚了?
查看>>