一、最大公約數(gcd)
C++語言程序設計與應用中求GCD(最大公約數,下文使用GCD代替)的兩種常用方式:更相減損法和輾轉相除法。
2.1 更相減損法
兩個正整數a和b(a>b),它們的最大公約數等於a-b的差值c和較小數b的最大公約數,這個算法的優點,就是避免了大整數取模導致效率低下,但是運算次數要比輾轉相除多得多,所以我們在使用的時候需要判斷一下。
代碼如下:
1 int gcd(int a, int b) 2 { 3 if (a == b) 4 return a; 5 else if (a > b) 6 return gcd(a - b, b); 7 else
8 return gcd(b - a, a); 9 }
2.2 更相減損法
兩個正整數a和b(a>b),它們的最大公約數等於a除以b的余數c和b之間的最大公約數。其實就是把更相減損變得更高級一點(加減運算變乘除運算,提升了一個級別),但是大整數取模會讓一些題極為頭疼,所以我們還是要慎重考慮什么時候用更相減損什么時候用輾轉相除。
代碼:
1 int gcd(int a, int b) 2 { 3 return a % b ? gcd(b, a%b) : b; 4 }
二、最小公倍數(lcm)
最小公倍數(英文縮寫為LCM),就是指對於2個數a和b,它們的公倍數中最小的那個仍然拿100和75舉例,它們的公倍數有300 600 900...
,其中最小的是300,所以100和75的最小公倍數為300,
a和b的最小公倍數可以這樣表示:[a,b]。
代碼如下:
// 最小公倍數
int lcm(int a, int b) { return a * b / gcd(a, b); // gcd(int,int) 必需被定義或聲明過
}