扩展欧几里得

扩展欧几里得

大家好,又见面了,我是全栈君。

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。

基本算法:设a=qb+r。当中a,b。q,r都是整数。则gcd(a,b)=gcd(b,r)。即gcd(a,b)=gcd(b,a%b)。

递归代码

__int64 gcd(__int64 a,__int64 b)
{
    return b==0?a:gcd(b,a%b);
}

扩展欧几里得

基本算法对于不全然为 0 的非负整数 a,b。gcd(a。b)表示 a,b 的最大公约数,

          必定存在整数对 x。y ,使得 gcd(a,b)=ax+by。

证明设 a>b。

1。显然当 b=0。gcd(a,b)=a。此时 x=1。y=0;

2,ab!=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;

  依据恒等定理得:x1=y2; y1=x2-(a/b)*y2;

   这样我们就得到了求解 x1,y1 的方法:x1。y1 的值基于 x2,y2.

  上面的思想是以递归定义的,由于 gcd 不断的递归求解一定会有个时候 b=0,所以递归能够结束。

递归代码:

__int64 exgcd(__int64 a,__int64 b,__int64 &x1,__int64 &y1)
{
    __int64 t,d;
    if(b==0){
        x1=1;
        y1=0;
        return a;
    }
    d=exgcd(b,a%b,x1,y1);
    t=x1;
    x1=y1;
    y1=t-a/b*y1;
    return d;
}

扩展欧几里德算法的应用主要有下面三方面:

(1)求解不定方程。

(2)求解模线性方程(线性同余方程)。

(3)求解模的逆元;

补充定理:

1.设a,b,c为随意整数。若方程ax+by=c的一组整数解为(x0。y0),
则它的随意整数解都能够写成(x0+kb’,y0-ka’),当中a’=a/gcd(a。b),b’=b/gcd(a,b),k为随意整数
2.定理:若ax+by=g。(g=gcd(a,b),即g是a,b的最大公约数)有整数解(x1,y1);则ax+by=c(c是g的倍数)有整数解(cx1/g,cy1/g)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115950.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 下面哪几个符号是linux通配符_什么是通配符,有什么作用

    下面哪几个符号是linux通配符_什么是通配符,有什么作用linux通配符含义:.当前目录****..当前目录的上一级目录*****通配符,代表任意0个或多个字符*****?通配符,代表重复0个或一个0前面的字符:连续不同命令的分隔符*****#配置文件注释*****|管道*****~用户的家目录*****-上一次的目录*****$变量前需加的符号/路径分隔符>或1…

    2022年9月19日
    5
  • 初始视觉里程计

    初始视觉里程计视觉里程计

    2022年6月20日
    23
  • 计算机操作系统(第3版)课后习题答案(完整版)

    计算机操作系统(第3版)课后习题答案(完整版)第一章1.设计现代OS的主要目标是什么?答:(1)有效性(2)方便性(3)可扩充性(4)开放性2.OS的作用可表现在哪几个方面?答:(1)OS作为用户与计算机硬件系统之间的接口(2)OS作为计算机系统资源的管理者(3)OS实现了对计算机资源的抽象3.为什么说OS实现了对计算机资源的抽象?答:OS首先在裸机上覆盖一层I/O设备管理软件,实现了对计算机硬件操作的第

    2022年5月30日
    143
  • 天翼云负载均衡配置ssl证书_阿里云服务器证书

    天翼云负载均衡配置ssl证书_阿里云服务器证书1、购买证书(图片有误,应该是购买通配符证书):2、申请证书:填写证书绑定域名:*.tianya.com联系人信息:xxx在自己的域名管理平台配置txt记录值,通过dns的txt记录类型来验证信息3、证书验证(根据上图中的DNS记录类型在域名管理平台进行txt记录验证,验证通过后点击上图中的验证按钮后会提示验证通过)4、申请验证完成:4.1点击验证后返回ssl证书管理平台页面会显示申请审核中4.2审核通过后下载自己需要的相应的证书备注:使用阿里云负载均衡进行https访问网站,

    2022年9月26日
    5
  • C++ Primer笔记7_STL之关联容器

    C++ Primer笔记7_STL之关联容器

    2022年1月20日
    36
  • ubuntu 卸载命令_Ubuntu怎么卸载

    ubuntu 卸载命令_Ubuntu怎么卸载前言本文重点介绍Ubuntu卸载软件的4种方法。他们分别是图形化界面的synaptic、自动解决依赖关系的apt-get,处理依赖关系更强大的aptitude,还有安装本地deb包的dpkg。方法一:Ubuntu使用synaptic图形化界面管理软件oucanrong@zcwyou:~$sudoapt-getinstallsynaptic-y以下是使用Synaptic管理软件的教程。输…

    2022年9月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号