為了更好的了解算法的概念,今天會分享一些C++求最大公約數幾種常見的算法。

第一種:窮舉法之一
窮舉法,也叫枚舉法,求最大公約數時從兩者中較小的數開始,由大到小列舉,直到找到第一個公約數為止。
解釋:拿其中一個數出來,用一個臨時變量(tem)保存,每次都把那兩個數除以這個臨時變量。如果能除斷,直接返回tem;如果不能除斷,tem- -,直到都能除斷,再返回tem。tem就是它們的最大公約數。
#include <iostream>
using namespace std;
int CommFactor1(int m, int n); //函數的聲明
int main()
{
int a, b;
cin >> a >> b;
cout << "這兩個數的最大公約數為:" << CommFactor1(a,b)<< endl;
return 0;
}
int CommFactor1(int m,int n)
{
int tem;
for (tem = m;; tem--)
{
if (m % tem == 0 && n % tem == 0)
{
break;
}
}
return tem;
}
第二種:窮舉法之二
解釋:求出兩數的所有公因子,再把公因子累乘得到最大公約數。
#include <iostream>
using namespace std;
int CommFactor2(int m, int n); //函數的聲明
int main()
{
int a, b;
cin >> a >> b;
cout << "這兩個數的最大公約數為:" << CommFactor2(a,b)<< endl;
return 0;
}
int CommFactor2(int m,int n)
{
int i;
int factor = 1;
for (i=2;i<=m&&i<<n;i++)
{
while(m % i == 0 && n % i == 0) //這里不能用if語句,因為可能會有重復的公因子
{
factor = factor * i;
m = m / i;
n = n / i;
}
}
return factor;
}
第三種:輾轉相除法
輾轉相除法,又稱歐幾里得算法。用於計算兩個正整數a,b的最大公約數和最小公倍數,其依賴於gcd(a,b) = a (b=0)和gcd(b,a mod b) (b!=0).
解釋:將兩個數輾轉相除直到余數為0。
#include <iostream>
using namespace std;
int CommFactor3(int m, int n); //函數的聲明
int main()
{
int a, b;
cin >> a >> b;
cout << "這兩個數的最大公約數為:" << CommFactor2(a,b)<< endl;
return 0;
}
int CommFactor3(int m,int n)
{
int z = n;
while (m % n != 0)
{
z = m % n;
m = n;
n = z;
}
return z;
}
第四種:輾轉相減法
輾轉相減法,若兩個正整數都為偶數,則用2約簡,直到不能約簡為止。然后用大數減小數,將差與較小的數比較,再以大數減小數,直到減數和差相等為止。
解釋:將兩個數輾轉相減直到兩數相等。
#include <iostream>
using namespace std;
int CommFactor4(int m, int n); //函數的聲明
int main()
{
int a, b;
cin >> a >> b;
cout << "這兩個數的最大公約數為:" << CommFactor4(a,b)<< endl;
return 0;
}
int CommFactor4(int m,int n)
{
while (m != n)
{
if (m > n)
{
m = m - n;
}
else
{
n = n - m;
}
}
return m;
}
以上就是關於對C++求最大公約數四種方法解析的詳細介紹,希望對大家的學習有所幫助。

如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
【C語言C++學習企鵝圈子】,分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習書籍:

編程學習視頻:
