有关欧几里德算法整理:


1.一些相关概念: <1>.整除性与约数: ①一个整数可以被另外一个整数整除即为d|a(表示d整除a,通俗的说是a可以被d整除),其含义也可以说成,存在某个整数k,使得a=kd.
②如果d|a且d>=0,则称d是a的约数。
③如果d|a,则-d|a,即a的任何约数的负数同样可以整除a.但一般规定,约数为非负数。非零整数a的约数应至少为1,且d<=|a|.
④因子:整数a的非平凡约数(除了1和它本身的约数)称为a的因子。 <2>.素数和合数. <3>.除法定理:
对于任何整数a和任何正整数n,存在唯一整数q和r,满足0<=r<n,且a=qn+r.
        等模:               
根据整数模n的余数,我们可以将所有的整数划分成n个等分类。包含整数a的模n等价类为:[a]n={a+kn}
   <4>.公约数与最大公约数:
①概念:
公约数:如果d是a的约数并且d也是b的约数,则d是a与b的公约数;
两个不同时为0的整数a与b的公约数种最大的称为其最大公约数,记作gcd(a,b);
②基本性质:
公约数的重要性质:若d是a,b的公约数,则d|(a+b)且d|(a-b);且对任意整数x,y,有d|(ax+by);
gcd函数的基本性质略简单不提; 若任意整数a,b不都为0,则gcd(a,b)为a与b的线性组合集{ax+by:x,y属于Z}的最小正整数。
 这里略带证明一下:

       设s是a与b的线性组合集合中的最小正元素,并且对某个x,y属于Z,有s=ax+by,设q=a/s.
a mod s=a-qs;
由于0<=a mod s<s
=>a mod s=
=>s|a;
同理,s|b
=>s是a与b的公约数,满足gcd(a,b)>=s;
又gcd(a,b)|s,s>0
=>gcd(a,b)<=s;
结合以上,gcd(a,b)=s;

2.欧几里德算法:

  <1>.基本原理:gcd(a,b)=gcd(b,a mod b)

  <2>.代码:
欧几里德算法://递归
int gcd(int a,int b)
{
if (b==0) return a;
else return gcd(b,a mod b);
} 最小公倍数:
int gbs(int m,int n)
{
return m*n/gcd(m,n);
}

 3.扩展欧几里德算法:

<1>.形式:d=gcd(a,b)=ax+by;

<2>.推导:

设 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;

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

代码如下

int exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int r=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return r;
}

  

如果您不太理解以上的程序,可以试着看看算法导论的伪代码:

这个代码是实现起来和上面是一样的,只是在这里可以帮助理解

EXTENDED-EUCLID(a,b)
if(b=0)
then return (a,1,0)
(d1,x1,y1) <- (d1,y1,x1-a/b*y )
return (d,x,y)

  

个人觉得,要真正理解这个算法,还是需要通过刷题来领会


           

欧几里德算法及其扩展(推导&&模板)的更多相关文章

  1. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

  2. 欧几里德与扩展欧几里德算法 Extended Euclidean algorithm

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

  3. poj2142-The Balance(扩展欧几里德算法)

    一,题意: 有两个类型的砝码,质量分别为a,b;现在要求称出质量为d的物品, 要用多少a砝码(x)和多少b砝码(y),使得(x+y)最小.(注意:砝码位置有左右之分). 二,思路: 1,砝码有左右位置 ...

  4. poj2115-C Looooops(扩展欧几里德算法)

    本题和poj1061青蛙问题同属一类,都运用到扩展欧几里德算法,可以参考poj1061,解题思路步骤基本都一样.一,题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循 ...

  5. poj1061-青蛙的约会(扩展欧几里德算法)

    一,题意: 两个青蛙在赤道上跳跃,走环路.起始位置分别为x,y. 每次跳跃距离分别为m,n.赤道长度为L.两青蛙跳跃方向与次数相同的情况下, 问两青蛙是否有方法跳跃到同一点.输出最少跳跃次数.二,思路 ...

  6. HDU 1576 A/B 扩展欧几里德算法

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

  7. ACM_扩展欧几里德算法

    <pre name="code" class="cpp">/* 扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表 ...

  8. 扩展欧几里德算法(递归及非递归实现c++版)

    今天终于弄懂了扩展欧几里德算法,有了自己的理解,觉得很神奇,就想着写一篇博客. 在介绍扩展欧几里德算法之前,我们先来回顾一下欧几里德算法. 欧几里德算法(辗转相除法): 辗转相除法求最大公约数,高中就 ...

  9. 欧几里德算法gcd及其拓展终极解释

    这个困扰了自己好久,终于找到了解释,还有自己改动了一点点,耐心看完一定能加深理解   扩展欧几里德算法-求解不定方程,线性同余方程. 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n ...

随机推荐

  1. 分析RAC下一个SPFILE整合的三篇文章的文件更改

    大约RAC下一个spfile分析_整理在_2014.4.17 说明:文章来源于网络 第一篇:RAC下SPFILE文件改动 在RAC下spfile位置的改动与单节点环境不全然一致,有些地方须要特别注意, ...

  2. javascript权威指南(2)

    JavaScript预定义了一系列全局变量和函数,在自定义变量和函数式要避免使用这些预定义的名称: arguments encodeURI  Infinity  Number  RegExp Arra ...

  3. swift 注意事项 (十六) —— 可选链

    可选链(Optional Chaining) 我们都知道"可选型"是什么.那么可选链又是什么,举个样例解释一下: struct MyName{      var name } st ...

  4. unicode编码和中国的相互转换

    如果你的原始文件1.properties(该文件的编码中国).要转换unicode的 在cmd通过进入你在哪里在这种类型的文件夹: native2ascii -encoding gb2312 1.pr ...

  5. 【百度地图API】暑假放假回老家——城市切换功能

    原文:[百度地图API]暑假放假回老家--城市切换功能 任务描述: 酸奶小妹放寒假啦,要从北京呼啦一下飞回重庆呢.现在百度地图API上不能直接切换城市,怎么办呢? 如何实现: 利用API先搜索到要去城 ...

  6. 数据库数据导出成XML文件

    在数据库中,怎样把库中的数据导出XML文件, sql语句如下: SELECT *  FROM 表名 FOR XML AUTO, ELEMENTS

  7. C--运算符,表达式和语句实例

    //第五章 运算符,表达式和语句 #include<stdio.h> //引入头文件 #include<math.h> #define ADJUST 7.64 //定义常量 # ...

  8. linux 安装httpd(验证通过)

    一.安装apache(http服务) 1. 从apache.org下载源码安装包 2. 解压缩 # tar zxf httpd-2.2.4.tar.gz # cd httpd-2.2.4 3. 安装a ...

  9. IOS开发之——使用SBJson拼接Json字符串

    SBJson包的下载地址在上一篇文章中. 能够使用NSDictionary中的键值对来拼接Json数据,很方便,也能够进行嵌套,直接上代码: //開始拼接Json字符串 NSDictionary *d ...

  10. WebService使用JSON格式传递笔记+JQuery测试

    原文WebService使用JSON格式传递笔记+JQuery测试 因为一些因素,必须改写WebService,很传统,但是很多公司还在用.. 因为XML 的关系,不想让他传递数据的时候过度肥大,所以 ...