如何求兩個數的最大公約數,網上已經有很多辦法,作爲自己的筆記記一下比較常用和好用的幾種。
大神的更詳細鏈接在此:
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算法就是爲了解決歐幾里得算法的缺陷而誕生的。
其主要思想是;