輾轉相除法原理分析


1、輾轉相除法求最大公約數

    int a, b, c;

    printf("請輸入兩個整數(逗號隔開):");

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

    c = a%b;

    while (c != 0)

    {

        a = b;

        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亦互質。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM