最大公約數(GCD)與最小公倍數(LCM)的計算


  給出兩個數a、b,求最大公約數(GCD)與最小公倍數(LCM)

一、最大公約數(GCD)

    最大公約數的遞歸:

 * 1、若a可以整除b,則最大公約數是b
 * 2、如果1不成立,最大公約數便是b與a%b的最大公約數
 * 示例:求(140,21)
 * 140%21 = 14
 * 21%14 = 7
 * 14%7 = 0
 * 返回7
  代碼如下,非常簡單,一行就夠了:
1 int GCD(int a,int b)
2 {
3     return a%b?GCD(b,a%b):b;
4 }

 二、最小公倍數(LCM)

  求出最大公約數后m后,最小公倍數就是a*b/m了,很簡單。這里做一個擴展,求1~n共n個數的最小公倍數

思路:

兩個數的情況:
設兩個數分別為a,b
先用輾轉相除法求gcd(a,b),也就是a,b的最大公約數
然后lcm(a,b)=a*b/gcd(a,b)
n個數的情況:
設n個數分別為a1,a2,……an
則先求b1=lcm(a1,a2)
再求b2=lcm(b1,a3)
b3=lcm(b2,a4)
b4=lcm(b3,a5)
……
最后求到b[n-1]就是答案
復雜度接近O(n)
代碼如下:
 1 #include <iostream>
 2 using namespace std;
 3 int GCD(int a,int b)
 4 {
 5     return a%b?gcd(b,a%b):b;
 6 }
 7 int main()
 8 {   
 9     
10     int i,n,m,temp=0,ans=1;       
11     cin >> n;        
12    for (i=1; i<=n; i++) 
13    {                       
14       temp=GCD(ans,i);           
15       ans=ans*i /temp;
16    }       
17   cout << ans << '\n';   
18   
19 return 0;
20 }

 


免責聲明!

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



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