题目描述:
- 描述: 求两个数的最小公倍数
思路
- 首先,要明白什么是
最小公倍数,顾名思义,求a与b这两个数的最小公倍数,即求最小正整数c,使得c%a=0与c%b=0这两个等式要同时满足才可以 - 如果有正整数k,k=a*b,那么k一定是a与b的其中一个公倍数,那么a和b的最小公倍数一定是不大于k的
- 那么假设有a与b的公约数c,则可以得到下面三个等式:
- 其中b/c与a/c均为整数,即k/c同时为a和b的倍数
- 那么如果c并不是a与b的公约数,则b/c与a/c至少有一个不为整数,当然,此时的k/c也不再是a与b的公倍数
- 那么假设有a与b的公约数c,则可以得到下面三个等式:
- 因此,如果我们想要取得两个数的最小公倍数,那么就需要找到最大的公约数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 天,点击查看活动详情”