扩展欧几里得算法是欧几里得算法的扩展。已知整数a,b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个可能是负数),是他们满足贝祖等式ax+by=gcd(a,b),如果a是负数,可以把问题转换成|a|(-x)+by=gcd(a,b),然后令x’=(-x).
通常谈到最大公约数时,我们都会提到非常基本的事实:给予两个整数a,b,必存在整数x,y使得ax+by=gcd(a,b).
有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。
欧几里得算法也可以用来计算模反元素;
我也不是太懂,这个还需以后好好研究一下:
求解 x,y的方法的理解
设 a>b。
1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
2,a>b>0 时
设 ax1+ by1= gcd(a,b);
bx2+ (a mod b)y2= gcd(b,a mod b);
根据朴素的欧几里德原理有 gcd(a,b) = gcd(b,a mod b);
则:ax1+ by1= bx2+ (a mod b)y2;
即:ax1+ by1= bx2+ (a - [a / b] * b)y2=ay2+ bx2- [a / b] * by2;
也就是ax1+ by1 == ay2+ b(x2- [a / b] *y2);
根据恒等定理得:x1=y2; y1=x2- [a / b] *y2;
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2.
上面的思想是以递归定义的,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以结束。

由于java没有指针,所以用指针代替比较方便

package 基本算法;import java.util.Scanner;public class 扩展欧几里得算法 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int a=sc.nextInt();int b=sc.nextInt();Int y=new Int();Int x=new Int();int m=exgcd(a, b, x, y);System.out.println(m+" "+x.v+" "+y.v);}public static int exgcd(int a,int b,Int x,Int y) {if(b==0) {x.v=1;y.v=0;return a;}
//  下述由于将x,y的位置进行调换,所以式子有所不同,可以用下面的方法;
//      int gcd=exgcd(b, a%b, y, x);
//      y.v-=(a/b)*x.v;int gcd=exgcd(b, a%b, x, y);int c=y.v;y.v=x.v-(a/b)*y.v;x.v=c;return gcd;}}
class Int{int v;public Int() {};public Int(int v) {this.v=v;}
}

扩展欧几里得算法——java相关推荐

  1. HDU1573 X问题【扩展欧几里得算法】

    X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

  2. HDU1576 A/B【扩展欧几里得算法+试探法】

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. Python在GF(2⁸)有限域上求解多项式的乘法逆元——基于扩展欧几里得算法

    文章目录 一.前言 二.数学基础 1.GF(2⁸)有限域内的多项式 2.不可约多项式 3.多项式模运算 3.乘法逆元 三.算法步骤 1.扩展欧几里得算法 2.多项式除法 3.多项式乘法 四.代码实现 ...

  4. 拓展欧几里得算法java实现

    扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展.除了计算a.b两个整数的最大公约数,此算法还能找到整数x.y(其中一个很可能是负数). 通常谈到最大公因子时, 我们都会提到一个非常基本的事实: ...

  5. 扩展欧几里得算法java_扩展欧几里得算法

    首先.扩展欧几里得定理:对于两个不全为0的整数a.b,必存在一组解x,y,使得ax+by==gcd(a,b); int gcd(int a,intb) {intt,d;if(b==0) { x=1; ...

  6. 扩展欧几里得算法_扩展欧几里得递推算法

    欧几里得算法 表示 整数 a 与 b 的最大公约数. 若 t = a % b, 则 证明略. 递推版 gcd 算法 gcd 接受变量元组 (a, b) 作为输入,输出最大公约数 (r). 我们很难直接 ...

  7. 欧几里得算法扩展欧几里得算法

    欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...

  8. 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...

    难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...

  9. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  10. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...

最新文章

  1. 30个在线学习设计与开发的站点
  2. Windows 7系统垃圾清理自写程序
  3. 2019.7.16 网络层协议与应用
  4. SQL SERVER视图
  5. mysql 事务 视图 存储过程 触发器
  6. ubuntu 上搭建lanp环境
  7. 彩虹易支付最新版开源版源码分享
  8. 逗娱-游戏程序开发实习生测试题
  9. 开关稳压集成电路电源
  10. 服务器受到DDOS攻击怎么办
  11. 计算机无线键盘没反应,电脑无线键盘没反应怎么回事
  12. 京东企业注册HTML
  13. 首页被绑定为www.7939.com的手工解除方法
  14. Android程序打包安装过程
  15. 【深度学习】模型部署的错误整理
  16. Python文本挖掘:词云图
  17. 【遗传规划/计算智能】 彻底学会 DEAP 框架,从零搭建 GP
  18. TM1650和AIP650 按键扫描、LED驱动程序
  19. 中国聚丙烯酰胺行业市场研究与投资价值报告(2022版)
  20. ChatGPT神奇用法:定点周边景点推荐,Get私人导游!

热门文章

  1. KVM虚拟化技术(理论知识+搭建虚拟化平台实验步骤)
  2. Python压缩图片到指定大小
  3. smartsvn smartgit 安装 及其破解
  4. 树莓派4b自带wifi_树莓派4B wifi开机启动
  5. 将两个顺序表合并为一个新的顺序表
  6. Learning to Generalize:Meta-Learning for Domain Geralization 深度理解(公式详细推导,包含二阶导)
  7. 紧急 抢救mysql 数据库 恢复到指定时间点
  8. 【爬虫】身份证前6位区域划分编码爬取
  9. 目标跟踪之ADMM求解简介
  10. 使用云函数快速升级网易云音乐等级