扩展欧几里得

扩展欧几里得

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

欧几里德算法又称辗转相除法,用于计算两个整数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年1月28日 上午10:00
下一篇 2022年1月28日 上午10:00


相关推荐

  • BIEE_biee报表日志

    BIEE_biee报表日志目录创建资料库创建物理模型创建逻辑模型创建展现模型保存资料库配置 OracleBIServer 使用新资料库在OracleAnswer中定义查询参考创建资料库BIEE的资料库(Repository)是一个后缀名为rpd的物理文件,其中存储了三类元数据:数据源物理模型,逻辑模型,以及展现模型。OracleBIServer是资料库的使用者:在前端,BI

    2025年8月22日
    6
  • 二叉树一定是完全二叉树_完全二叉树概念

    二叉树一定是完全二叉树_完全二叉树概念一、树的概念及其结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树的特点①有一个特殊的结点,称为根结点,根节点没有前驱结点。②除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<=i<=m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继③因此,树是递归.

    2025年7月6日
    6
  • java date 毫秒_如何在几个数字上加上同一个单位

    java date 毫秒_如何在几个数字上加上同一个单位//时间加上秒后的时间日期publicstaticDatetimePastTenSecond(Integersecond,Stringotime){try{SimpleDateFormatsdf=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);Datedt=sdf.parse(otime);CalendarnewTime=Calenda.

    2025年9月19日
    6
  • Android 系统 目录 分析「建议收藏」

    Android 系统 目录 分析「建议收藏」转自:hknote及Ophone8作者:Wanan.’s  及  O友今天要来分析一下Android文件系统的/system目录的结构。/system目录是在Android文件系统占有及其重要的位置,基本上所有的工具和应用程序都在这个目录下,我看来是一个真正的rootfs。他在Android手机中存放在nandflash的mtd3中,是一个yaffs2文件系统,在启动时被挂载在root

    2022年10月15日
    6
  • 基于LangChain的RAG与Agent智能体开发 – 阿里云百炼大模型平台接入

    基于LangChain的RAG与Agent智能体开发 – 阿里云百炼大模型平台接入

    2026年3月15日
    1
  • 留言板个人代码展示墙

    留言板个人代码展示墙每逢期末 各科专业课的课程设计相信会让许多和我一样的大学生磨破脑袋 本着与人为善 授人予鱼的思想 我决定 好吧 你懂的 废话不多说 上菜 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 留言板功能模块 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 一 注册模块 nbsp 二 登陆模块三 留言板界面四 留言模块五 对个人留言的

    2026年3月26日
    1

发表回复

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

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