最大公約數和最小公倍數


一、最大公約數(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) 必需被定義或聲明過
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM