展轉相除法原理分析

一、展轉相除法求最大公約數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亦互質。

相關文章
相關標籤/搜索