算法學習筆記(1)----最大公約數

求兩個整數a,b的最大公約數可用展轉相除法獲得,其具體證實以下:假設a>bcode

  1. 假設a=bt+r,即證實gcd(a,b)=gcd(b,r),設gcd(a,b)=c,a=mc,b=ncclass

  2. r=a-bt=mc-ntc=(m-nt)c,則只需證實m-nt與n互素gc

  3. 反證法:假設m-nt與n不互素,則m-nt=xd,n=yd(d>1),則a=mc=(nt+xd)c=(ytd+xd)c=(yt+x)dc,b=nc=ydc,則while

    gcd(a,b)=dc,與已知條件相悖,故m-nt與n互素,故gcd(b,r)=c=gcd(a,b)co

代碼以下:return

int gcd(int a, int b)  //a>b
{
    int c;
    do {
        c = a % b;
        a = b;
        b = c;
    }while( c != 0);
    return a;
}
相關文章
相關標籤/搜索