高中我們都學過輾轉相除法,如果有人沒學過或者忘記了那也沒關係,在這裏我們在講解一遍歐幾里得算法(求最大公約數)
歐幾里德算法是用來求兩個正整數最大公約數的算法。是由古希臘數學家歐幾里德在其著作《The Elements》中最早描述了這種算法,所以被命名爲歐幾里德算法。
擴展歐幾里德算法可用於RSA加密等領域。
假如需要求 1997 和 615 兩個正整數的最大公約數,用歐幾里德算法,是這樣進行的:
當被加的數爲 0 時,就得出了 1997 和 615 的最大公約數 1。
歐幾里德算法又稱輾轉相除法,是指用於計算兩個正整數a,b的最大公約數。應用領域有數學和計算機兩個方面。計算公式gcd(a,b) = gcd(b,a mod b)。
至於代碼嘛。大家可以理解成一個遞歸同時我也會寫出循環和遞歸的區別讓大家更好的理解什麼是遞歸
遞歸寫法:
int gcd(int a,int b)
{
if (a < b)
std::swap(a, b);
return b == 0 ? a : gcd(b, a % b);
}
循環寫法:
int gcd(int a, int b)
{
while(b)
{
int t = b;
b = a % b;
a = t;
}
return a;
}