题记:这是我第四次审查扩展欧几里德原理,由于不经常使用。当你想使用,可以不记得细节,经常检查信息,所以,简单地梳理这一原则和扩展欧几里德的原则,以博客存档以备查用。

一个、欧几里德原理

欧几里德原理(Euclidean Theory)论中求两正整数最大公约数(Greatest Common Divisor, GCD)的方法。欧几里得原理在中国古代又称“辗转相除法”,这一称法揭示了其求最大公约数的过程。

对于两个正整数a,b。记其最大公约数为gcd (a,b)。

那么我们有 gcd (a,b) = gcd (b,a%b)

即a与b的最大公约数也是a除以b的余数与b的最大公约数。

欧几里得原理能够通过递归实现,以下给出事实上现的C代码:

int gcd(int a, int b)
{
if(b==0) return a;
return gcd(b,a%b);
}

函数返回參数a,b的最大公约数。注意该gcd函数调用时參数a,b不应该同一时候为0,否则该函数将不存在实际意义。

二、扩展欧几里得原理

欧几里得原理的扩展版本号最经典的使用方法在于求二元一次不定方程的整数解。

(1)先来看一个最简单的二元一次不定方程:

a*x + b*y = 1     (*),且 gcd (a,b) = 1,设它的一组整数解为 x = x1, y = y1。

对于还有一个二元一次不定方程:

b*x + (a%b)*y = 1    (**),设它的一组整数解为 x = x2, y = y2。

那么我们能够得到 a*x1 + b*y1 = b*x2 +(a%b)*y2 = 1,又由于 a%b = a - a/b*b。带入前式,

我们能够得到 a*x1 + b*y1 = a*y2 + b*(x2-a/b*y2)。因为a,b是随意的互质正整数。故可由该式得到方程(*)与方程(**)的解的关系例如以下:

x1 = y2。

y1 = x2-a/b*y2。即方程(*)的解可由方程(**)的解得到。

若我们想要求得a*x + b*y = 1的解,能够先求b*x + (a%b)*y = 1的解。我们能够发现这两个方程其未知量x,y 的系数之间是“辗转相除”的关系。

那么终于我们仅仅须要求gcd (a,b)*x + 0*y = 1的解(这里gcd (a,b) = 1,其解为 x = 1。y随意,一般取0),逆推之就可得到原方程的解。而逆推的过程就是扩展欧几里得原理的过程。

(2)我们如今已经攻克了求二元一次不定方程 a*x + b*y = 1, gcd (a,b) = 1的解。

以下考察二元一次不定方程的普通情况:

对于一般的二元一次方程 m*x + n*y = t,

  • 若gcd (m,n) | t,亦即 t%gcd(m,n) == 0。方程的解将与方程 (m/gcd(m,n))*x + (n/gcd(m,n))*y = t/gcd(m,n) 的解同样。

    记新方程为 a*x + b*y = d。那么其解将是方程 a*x + b*y = 1的d倍。

    而方程 a*x + b*y = 1, gcd(a,b) = 1的解在(1)中已经求得。

  • 否则方程无整数解

上述过程即使用扩展欧几里德原理一般寻求解决的整个过程简单二元不定方程。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

欧几里德欧几里德原理和扩展的原则,(Euclidean Theory and Extended Euclidean Theory)学习笔记的更多相关文章

  1. 扩展欧几里得算法(exGCD)学习笔记

    @(学习笔记)[扩展欧几里得] 本以为自己学过一次的知识不会那么容易忘记, 但事实证明, 两个星期后的我就已经不会做扩展欧几里得了...所以还是写一下学习笔记吧 问题概述 求解: \[ax + by ...

  2. API/SPI可扩展设计原则(转)

    API/SPI可扩展设计原则 博客分类: [设计体系]架构模式 API/SPISPISPI原则JAVA SPISPI机制  写本篇主要是用来后面写一篇可扩展性软件设计打好基础(苦于找不到一篇关于API ...

  3. Springboot默认加载application.yml原理以及扩展

    Springboot默认加载application.yml原理以及扩展 SpringApplication.run(...)默认会加载classpath下的application.yml或applic ...

  4. Unity3D 骨骼动画原理学习笔记

    最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 1. ...

  5. 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试

    机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...

  6. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  7. 并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理

    1. 概述 1.1 什么是线程池 与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去 ...

  8. ZooKeeper学习笔记(二)——内部原理

    zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...

  9. 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建

    目录 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建 14.1 RAID概念 14.1.1 RAID几种常见的类型 14.1.2 RAID-0工作原理 14.1.3 RAID-1工 ...

随机推荐

  1. 【Java基础】常用基础--从键盘中得到一个字符串

    public static void main(String[] args) { InputStreamReader ipsReader = new InputStreamReader(System. ...

  2. IBatis.net初步使用

    最近加班比较忙,时间也比较琐碎,蛮久没有写东西了.这次就总结一下自己使用IBatis.net的一些总结吧. IBatis简介 IBatis.net是一款开源的Orm框架,应该算是从java的IBati ...

  3. outlook 当关闭时最小化到任务栏完美的解决方案

    近期使用Outlook,但很发现easy退出关闭.不能达到最小化封. 在网上找了很长时间也用outlook on the desktop插件,但该插件安装后的执行错误和被遗弃. 最后,我发现了一个叫k ...

  4. C++ 堆 和 堆 分析

    [摘要] 堆和栈,即是数据结构,又是分配存储空间的不同方式.在数据结构上.堆是树型层次结构,结点按keyword次序排列,经常使用的堆为二叉堆:栈是一种先进后出的数据结构.在内存分配上的堆和栈,首要差 ...

  5. 先锋军Android注射技术《三》

    继续 于<两>通过专门出台ptrace实施注射的技术解决方案,在这一章,我就为大家介绍一Android在独特的喷射技术,我点了他的名字--Component Injection.顾名思义. ...

  6. vs2010公布时去除msvcp100.dll和msvcr100.dll图讲解明

    近期开发个程序,Copy到虚拟机环境中測试时提示缺少msvcr100.dll,于是想到编译时设置选项去除依赖. 什么是 msvcr100.dll MS = Microsoft V = Visual C ...

  7. Android MenuItem 设置文本颜色-TextColor设置

    前面一直在寻找 MenuItem文字颜色设置. 我发现API唯一的背景颜色设置. .. 因此,找到下面的方法.在OverFlow看到. 在onCreateOptionsMenu一下. 使MenuIte ...

  8. 【Android先进】我们为什么要创建Activity基类Activity什么是一般的基类方法

    今天,它可以被视为只是基本完成了其首个商业项目,在发展过程中,风格,然而随着工作经验的积累.最终開始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在如今的项目 ...

  9. SEO思维的优化源于生活

    [回顾]无论哪个行业的,.学习技巧和操作非常简单,它主要是一个时间的问题?回到seo行业,操作和技能是非常easy学习,和seo入门是互联网行业最easy行业,不像有些人理解的代码,敲代码等,它必须基 ...

  10. SqlServer发送邮件,定时作业

    今天偶然研究了一下sqlserver发送邮件的功能,之前听说过可以发,但是一直没尝试过,只是用C#写后台程序的方式来发邮件. 现在又多了一种发送邮件的途径. 大致的步骤如下: 1.配置sqlserve ...