辗转相除法证明第一步可以先约分么

1.基本原理
在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《》(第VII卷,命题yⅠ和Ⅱ)中,而在中国则可以追溯至东汉出现的《》。
两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 / 105 = 2余42,所以105和42的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,如21 = 5 × 105 + (-2) × 252。这个重要的叫做贝祖等式。
2.算法描述
自然语言描述
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余数,则
gcd(a,b) = gcd(b,r)
2. a 和其倍数之最大公因子为 a。
另一种写法是:
1. a ÷ b,令r为所得余数(0≤r&b)
若 r = 0,算法结束;b 即为答案。
2. 互换:置 a←b,b←r,并返回第一步
3.代码实现
两个版本的实现方式:
(1)循环迭代
int gcd(int a, int b)
    while (b)
    {
        int temp=b;
        b = a%b;
        a =
    }
   
(2)递归实现
int gcd(int a, int b)
    if (b==0)
      
    else
       return gcd(b,a%b);
阅读(...) 评论()【图文】必修三13算法案例(一)辗转相除法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
必修三13算法案例(一)辗转相除法
上传于||文档简介
&&必修三13算法案例(一)辗转相除法
大小:406.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢辗转相除法
义项指多义词的不同概念,如的义项:网球运动员、歌手等;的义项:冯小刚执导电影、江苏卫视交友节目等。
所属类别 :
其他科学相关
其他科学相关
辗转相除法, 又名(Euclidean algorithm)乃求两个之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。这种算法,在中国则可以追溯至东汉出现的《》。
外文名称 Euclidean algorithm
别名 欧几里德算法
出自 《几何原本》
设两数为a、b(a&b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)。
设两数为a、b(b&a),用gcd(a,b)表示a,b的最大公约数,r=a mod b 为a除以b以后的余数,k为a除以b的商,即a÷b=k.......r。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。第一步:令c=gcd(a,b),则设a=mc,b=nc第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c第三步:根据第二步结果可知c也是r的因数第四步:可以断定m-kn与n互质【否则,可设m-kn=xd,n=yd,(d&1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)cd,b=nc=ycd,故a与b最大公约数成为cd,而非c,与前面结论矛盾】从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。证毕。
自然语言描述辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:1. 若 r 是 a ÷ b 的余数,则gcd(a,b) = gcd(b,r)2. a 和其倍数之最大公因子为 b。另一种写法是:1. a ÷ b,令r为所得余数(0≤r&b)若 r = 0,算法结束;b 即为答案。2. 互换:置 a←b,b←r,并返回第一步伪代码这个算法可以用递归写成如下:function gcd(a,b) {if b&&0return gcd(b,a mod b);else}gcd 简易函数c语言辗转相除代码:int GCD(int a,int b){returnb==0?a:GCD(b,a%b);}C语言实现/*题目:输入两个正整数,求其最大公约数。*/#include &stdio.h&unsigned gcd ( unsigned,unsigned ) ;int main( void ){unsigned m,n;printf(&请输入两个正整数:&);scanf(&%u%u&,&m,&n);printf(&%u与%u的最大公约数为:%u\n&,m,n,gcd ( m,n ) );return 0;}/* 功能:返回正整数m和n的最大公约数*/unsigned gcd ( unsigned m,unsigned n ){if (m&n){temp=m;m=n;n=}if ( m % n == 0){}else{return gcd ( n,m % n) ;}}/*题目:输入两个非负整数u和v,求其最大公约数。*/#include &stdio.h&main(){int u,v,r;printf(&please input u and v:&);scanf(&%d,%d&,&u,&v);while(v!=0){r=u%v;u=v;v=r;}printf(&%d\n&,u);}C#语言实现static int sucDivison/*除法*/(int m, int n){int remainder = 0;if (m % n == 0){}else{do{remainder = m %m =n =} while (remainder & 0);}if (n == 0){}}Basic实现INPUT m,nDOr=m MOD nm=nn=rLOOP UNTIL r=0PRINT mENDPascal实现function gcd(a,b:integer):beginif b=0 then gcd:=aelse gcd:=gcd (b,a mod b);Common Lisp实现(defun my-gcd (number-a number-b)(do ((r (mod number-a number-b) (mod ea eb))(eb number-b r) (ea number-a eb))((= 0 r) eb)))Java 实现/**** @return int* @tags @param m* @tags @param n* @tags @return* @todo 【方法二】利用辗除法*/public static int gcd(int m, int n) {while (true) {if ((m = m % n) == 0)if ((n = n % m) == 0)}}数据举例其中&a mod b&是指取 a ÷ b 的余数。例如,123456 和 7890 的最大公因子是 6,这可由下列步骤看出:aba mod b12345678905106789051062784510627842322278423224622322462124621261260时间复杂度辗转相除法的运算速度为 O(n),其中 n 为输入数值的位数。辗转相除法处理大数时非常高效,它需要的步骤不会超过较小数的位数(十进制下)的五倍。加百利·拉梅(GabrielLamé)于1844年证明了这点,开创了计算复杂性理论。
求不定方程的一组整数方法(注:以下出现的q(i),r(i)括号中的是下标,gcd(a,b)为a,b的最大公约数)辗转相除法可以求出特定条件的不定方程的一组整数解。设不定方程为ax+by=c,其中a,b,c为整数,且 gcd(a,b) | ca,b辗转相除的算式为b=q(1) a+r(2)a=q(2) r(2)+r(3)r(2)=q(3) r(3)+r(4)...r(n-2)=q(n-1)r(n-1)+r(n)r(n-1)=q(n)r(n)其中r(n)=gcd(a,b),不妨令b=r(0),a=r(1),r(n+1)=0第i个算式为r(i-1) = q(i) * r(i) + r(i+1)所以r(i+1) = r(i-1) - q(i) * r(i) (*)用公式(*)可以得到r(n)=gcd(a,b)关于a,b的线性组合sa+tb=gcd(a,b)所以不定方程a*x+b*y=c的一组特解为x=s*c/gcd(a,b) y=t*c/gcd(a,b)举例说明例如不定方程为326x+78y=4,求出一组整数解x,y求(326,78)的算式为:326=4*78+*7878=5*14+8 8=78-5*1414=1*8+6 6=14-1*88=1*6+2 2=8-1*66=3*2所以2=8-6=8-(14-8)=2*8-14=2*(78-5*14)-14=2*78-11*14=2*78-11*(326-4*78)=46*78-11*326即2=(-11)*326+46*78所以4=(-22)*326+92*78所以x = - 22, y = 92是不定方程326x+78y=4的一组解。
两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 / 105 = 2余42,所以105和42的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至余数变为零。这时的除数就是所求的两个数的最大公约数。由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,如21 = 5 × 105 + (-2) × 252。这个重要的叫做贝祖等式。辗转相除法处理大数时非常高效,它需要的步骤不会超过较小数的位数(十进制下)的五倍。加百利·拉梅(Gabriel Lamé)于1844年证明了这点,开创了计算复杂性理论。
{{each(i, video) list}}
{{if list.length > 8}}
查看全部 ${list.length} 期节目
{{if _first}}
内容来源于
百科兴趣圈
{{if list && list.length}}
360百科致力于成为最为用户所信赖的专业性百科网站。人人可编辑,让求知更简单。【图文】1.3.1算法案例(辗转相除法)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
1.3.1算法案例(辗转相除法)
上传于||文档简介
&&1.3.1算法案例(辗转相除法)
大小:324.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 泡妞第一步先做什么 的文章

 

随机推荐