Lowest Common Multiple Plus

#include <cstdio>
int gcd(int a, int b)
{
if(a % b == 0) return b;
else return gcd(b, a % b);
}
int main()
{
int n, a, b;
while(scanf("%d", &n) != EOF)
{
scanf("%d", &a);
n = n - 1;
while(n --)
{
scanf("%d", &b);
a = (a / gcd(a, b)) * b; // (a*b)/gcd(a, b) 有可能出现不能整除下取整的情况, 而(a/gcd(a, b))*b一定会整除
}
printf("%d\n", a);
}
return 0;
}
#include <cstdio>
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
int lcm(int a, int b)
{
return (a / gcd(a, b)) * b;
}
int main()
{
int n, a, b;
while(scanf("%d", &n) != EOF)
{
scanf("%d", &a);
n --;
while(n --)
{
scanf("%d", &b);
a = lcm(a, b);
}
printf("%d\n", a);
}
return 0;
}
最小公倍数的求解在最大公约数的基础上运行. 当得到a和b的最大公约数d之后, 可以马上得到a和b最小公倍数是ab / d.
由于ab在实际运算中可能会溢出,因此更恰当的写法是a / d * b.由于d是a的约数,所以a/d一定可以整除.(d是最大公因数)

浙公网安备 33010602011771号