day55 求两个数的最小公倍数(C++)

508 阅读2分钟

题目描述:

  • 描述: 求两个数的最小公倍数

思路

  • 首先,要明白什么是最小公倍数,顾名思义,求a与b这两个数的最小公倍数,即求最小正整数c,使得c%a=0与c%b=0这两个等式要同时满足才可以
  • 如果有正整数k,k=a*b,那么k一定是a与b的其中一个公倍数,那么a和b的最小公倍数一定是不大于k的
    • 那么假设有a与b的公约数c,则可以得到下面三个等式:
      • k=ab;k=a*b;
      • k/c=ab/c;k/c=a*b/c;
      • k/c=a(b/c)=b(a/c);k/c=a*(b/c)=b*(a/c);
      • 其中b/c与a/c均为整数,即k/c同时为a和b的倍数
    • 那么如果c并不是a与b的公约数,则b/c与a/c至少有一个不为整数,当然,此时的k/c也不再是a与b的公倍数
  • 因此,如果我们想要取得两个数的最小公倍数,那么就需要找到最大的公约数c使得k/c的值最小,而k/c就是我们准备求的最小公倍数,而可以通过上面的式子得知,k/c其实也就是a*b/c
  • 这样就将最大公约数与最小公倍数联系在了一起,而对于求两个数的最大公约数的理解,大家可以看专栏中day54的文章,专门讲解了求最大公约数,并且使用了两种方法

具体实现:

#include <iostream>
using namespace std;
 
int GCD(int a,int b){           // 求最大公约数
    int temp=0;
    while(b!=0){
        temp=a;
        a=b;
        b=temp%b;
    }
    return a;
}
 
int main(int argc, const char * argv[]) {
    int a,b;
    int gcd;
    int lcm;
    while (cin>>a>>b) {
        gcd=GCD(a, b);
        lcm=a*b/gcd;
        cout<<lcm<<endl;
    }
    return 0;
}

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 29 天,点击查看活动详情