如何求兩個數的最大公約數

如何求兩個數的最大公約數,網上已經有很多辦法,作爲自己的筆記記一下比較常用和好用的幾種。

大神的更詳細鏈接在此:

https://blog.csdn.net/Holmofy/article/details/76401074

1.輾轉相除法

先上定義:什麼是輾轉相除法。

給定兩個整數a和b,利用輾轉相除法求a和b的最大公約數的流程:

(1)假定a>b,如果a<b,則交換a和b的值

if(a<b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}

(2)假定a/b = q......r;r爲餘數

如果a除以b的餘數不爲0,那麼令a = b,b = r,重複執行a%b,直到餘數r爲0.

(3)返回此時的b,b就是最大公約數。

代碼:

int gcd2(int a,int b)
{	int c;
	if(a<b)
	{	a=a+b;
		b=a-b;
		a=a-b;
	}
	c=a%b;
	while(a%b!=0)
	{	a=b;
		b=c;
		c=a%b;	
	}
	return b;
}

2.更相減損法

int GCD(int a,int b)
{
    int ans=1;//儲存第一步中約掉的若干個2
    int gcd;//儲存最終返回的結果 
    while(a%2==0  &&  b%2==0)//如果ab均爲偶數則用2約簡 
    {
        a/=2;
        b/=2;
        ans*=2; 
    }
    //用這種方法有可能減少數字的位數,簡化計算,可以省略。 
     
    while(a!=b)//判斷兩數是否相等,也可以理解爲直到所得的減數和差相等爲止
        if(a>b)
            a-=b;//以較大的數減較小的數
        else
            b-=a;//以較大的數減較小的數
    gcd=a*ans; //求第一步中約掉的若干個2與第二步中等數的乘積 
     
    return gcd;//返回gcd
}

3.Stein算法

要講述Stein算法,首先要知道歐幾里得求最大公約數的缺陷:

來自百度百科。

Stein算法就是爲了解決歐幾里得算法的缺陷而誕生的。

其主要思想是;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章