问题描述
求 n 个数的最小公倍数。
输入
输入包含多个测试实例,每个测试实例的开始是一个正整数 n,然后是 n 个正整数
输出量
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输 出是一个 32 位的整数。
样本输入
2 4 6
3 2 5 7
样本输出
12
70
代码
#include <iostream>
using namespace std;
typedef unsigned int UI;
UI gcd(UI u,UI v);
UI lcm(UI u,UI v);
int main() {
int n;
UI u;
UI res;
while (cin >> n) {
res = 1;
while (n--) {
cin >> u;
res = lcm(res,u);
}
cout<<res<<endl;
}
}
UI gcd(UI u,UI v){ //辗转相除法求最大公约数
int remainder;
remainder=u%v;
while (remainder){
u=v;
v=remainder;
remainder=u%v;
}
return v;
}
UI lcm(UI u,UI v){ // 最小公倍数等于两数乘积除以最大公约数
return u*v/gcd(u,v);
}