Description:
求两个正整数的最小公倍数。
Time Limit:1000MS Memory Limit:32768K
Input:
输入数据含有不多于50对的数据,每对数据由两个正整数(0<n1,n2<100000)组成。Output:
对于每组数据n1和n1,计算最小公倍数,每个计算结果应占单独一行。Sample Input:
6 5 18 12
Sample Output:
30
36
题解:求两个正整数的最小公倍数,很容易想到用二者乘积除以其最大公约数,即a*b/gcd(a,b).
但是两数先相乘会产生很大的数,可能会超过整数的表示范围:
对于32位CPU,int的表示范围为-2^31~0~2^31-1,即-2147483648~2147483647.
所以,要把计算顺序改一下,最小公倍数=a/gcd(a,b)*b.
代码:
#include <iostream>
using namespace std;
int gcd(int ,int);
int main()
{
int a,b;
while(cin>>a>>b)
{
cout<<a/gcd(a,b)*b<<endl;
}
return 0;
}
int gcd(int x, int y)
{
if (y==0) return x;
else return gcd(y,x%y);
}