展转相除法原理分析

一、展转相除法求最大公约数spa

    int a, b, c;io

    printf("请输入两个整数(逗号隔开):");基础

    scanf("%d,%d", &a, &b);gc

    c = a%b;while

    while (c != 0)co

    {gcd

        a = b;printf

        b = c;

        c = a%b;

    }

 

 

互质是公约数只有1的两个整数,叫作互质整数(非负)。公约数只有1的两个天然数,叫作互质天然数(即指非负整数。)后者是前者的特殊情形。

 

【公约数和公倍数都是针对整数而言的!!】

展转相除法证实叙述:

a和b两个正整数,若是a>b

a/b     .… …. 余数为R1

b/R1    .… …. 余数为R2

R1/R2   .… …. 余数为R3

R2/R3   ..… ….余数为R4

…. ….

R(n-2)/R(n-1)……余数为Rn

当Rn为零的时候,R(n-1)必定是最大公约数。

 

展转相除法证实须要证实知足两个条件:

已知条件:a和b两个正整数,若是a>b,且a/b=0,则a和b的最大公约数必定为b。

第一个条件证实:

为何Rn最后必定会等于0?

缘由1:

任意两个数,能够是同奇同偶/以奇一偶,展转相除法,主要是除数和余数的计算

同偶,在展转相除过程当中,余数必为偶数。最终余数会变为2,从而任意一个数都/能够被2整除

同奇,则展转相除过程当中,余数必为偶数。最终余数会变为1,从而任意一个数均可以被1整除

一奇一偶,展转过程当中,余数必为奇数,最终会变为1 ,从而任意一个数均可以被1整除

缘由2:

由于余数都要小于除数,

随着展转相除的进行,除数和余数愈来愈小,

为什么展转相除法到最后余数必定为0

而每一次的除数又分别等于上一次的余数,因此,总有那么一个时刻,余数会等于0。

第二个条件证实:

为何a/b和b/R1和R2/R3和R(n-2)/R(n-1)的最大公约数相等?

 

设两数为a、b(a>b),用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  //设c为最大公约数,则m和n必定互质

第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c   //r也有公约数c,若是r=(m-kn)c和b=nc两个表达式中,m-kn和n是互质,就能够证实c也是r和b的最大公约数

第三步:假设m-kn与n非互质,而有一个公约数d,则有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,以前咱们的定义中c是a与b的最大公约数,此时与前面的假设矛盾,因此m-kn与n必定互质!所以c也是b与r的最大公约数。

 

从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。

证毕。

以上步骤的操做是创建在刚开始时r≠0的基础之上的。即m与n亦互质。

相关文章
相关标签/搜索