最小公倍数
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 1680 | Accepted: 413 |
Description
最小公倍数(Least Common Multiple,缩写L.C.M.),如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数a,b来说,指该两数共有倍数中最小的一个,记为lcm(a,b)。
Input
每行两个正整数a,b
Output
lcm(a,b),独立一行
Sample Input
5 6 1 19
Sample Output
30 19
这道题没写输入范围,但是用int会发生溢出,而且要用辗转相除法减少时间复杂度,不然容易超时,公倍数也要用:最小公倍数=两数的乘积/最大公约(因)数
#include <stdio.h>
int g1(long long a,long long b) //最大公因数
{
long t;
if(a<b){t=a;a=b;b=t;}
while(b>0)
{
a=a%b;
t=a;a=b;b=t;
}
return a;
}
int g2(long long a,long long b) //最小公倍数
{
long long i;
i=a/g1(a,b)*b;
return i;
}
int main()
{
long long a,b;
while(scanf("%lld%lld",&a,&b)!=EOF)
{
printf("%lld\n",g2(a,b));
}
return 0;
}