问题描述
编写一函数lcm,求解两个正整数的最小公倍数。
样例输入
一个满足题目要求的输入样例。
例:
3 5
样例输出
与上面样例对应的输出。
例:
15
数据规模和约定
输入数据中每一个数的范围
例:两个数都小于65536.
算法分析
一般来说,求两个正整数A、B的最小公倍数的算法思路很简单,主要分为以下几步:
1.判断其中一个较大的数是否为另外一个数的倍数,如果是,则返回较大的数,算法结束;否则进行进行第2步。
2.求两个数的乘积C = A * B。
3.从i = 1开始,求i * A(设A为较大的数)的结果,判断(i * A)% B == 0是否成立,且循环结束条件为i * A <= C,因为如果在循环结束之前不存在 i 使得 i * A为B的倍数,则A * B则为这两个数的最小公倍数。
C++代码
/*最小公倍数*/
#include <iostream>
using namespace std;
int lcm(int a,int b){
int min;
if(a < b){ //保证a为较大的值
min = a;
a = b;
b = min;
}
min = a % b;
if(!min){ //如果a为b的倍数,则a为a和b的最小公倍数
return min;
}
else{
min = a * b;
int i,temp;
for(i = 2;i <= min;i++){ // 因为a不是a和b的最小公倍数,所以i从2开始
temp = i * a;
if( temp % b == 0){ // 找到最小公倍数
return temp;
}
}
}
}
int main(){
int a,b;
cin >>a >> b;
cout<<lcm(a,b);
return 0;
}