扩展欧几里得

扩展欧几里得

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

欧几里德算法又称辗转相除法,用于计算两个整数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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在职场,辞退你、培养你,从来不是看能力

    在职场,辞退你、培养你,从来不是看能力

    2022年2月13日
    38
  • tortoisesvn是干嘛的_冲洗器使用方法图解

    tortoisesvn是干嘛的_冲洗器使用方法图解TotoiseSVN的基本使用方法来源 https://blog.csdn.net/hecongzhen/article/details/37879801在 项目管理实践教程一

    2022年8月5日
    15
  • tess4j验证码识别

    tess4j验证码识别tess4j的安装和使用参考:https://www.cnblogs.com/cmyxn/p/6993422.htmltess4j提高识别率1.对称近邻均值滤波参考:http://blog.csdn.net/fangbinwei93/article/details/505624492.指定config为digits,并修改tessdata\configs\digits文件,将白名单中设置…

    2022年6月12日
    57
  • java查看线程数量_oracle线程数最大多少

    java查看线程数量_oracle线程数最大多少TOPtop-H-p{pid}我这里筛选的是java的进程对应的thread是33PSpshuHp{pid}|wc-l直接计数统计出来

    2022年8月23日
    12
  • Proteus仿真–51单片机最小系统

    Proteus仿真–51单片机最小系统1.单片机的最小系统是由组成单片机系统必需的一些元件构成的,除了单片机之外,还需要包括电源供电电路、时钟电路、复位电路。下面着重介绍时钟电路和复位电路。1)时钟电路单片机工作时,从取指令到译码再进行微操作,必须在时钟信号控制下才能有序地进行,时钟电路就是为单片机工作提供基本时钟的。单片机的时钟信号通常有两种产生方式:内部时钟方式和外部时钟方式。内部时钟方式的原理电路如图所示。在单片机XTAL1和XTAL2引脚上跨接上一个晶振和两个稳频电容,可以与单片机片内的电路构成一个稳定的自激振荡器。晶振的取值

    2022年6月23日
    27
  • 三角形面积的计算公式小学_正三角形面积公式

    三角形面积的计算公式小学_正三角形面积公式1、三角形面积=1/2*底*高(三边都可做底)2、三角形面积=1/2absinC=1/2acsinB=1/2bcsinA3、三角形面积=abc/4R(其中R是三角形外接圆半径)你看看理解一下,其中1是比较常用的。4、三角形面积S=√x*(x-a)*(x-b)*(x-c)其中"√"是大根号,”x”为三角形周长的一半,a,b,c为边长三角形的面积的平方=p(p-a)(p-b)(p-

    2025年6月3日
    3

发表回复

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

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