A Least Common Multiple
题目描述
一组正整数的最小公倍数(LCM)是能被集合中所有数整除的最小正整数。例如5、7、15的LCM为105。
输入
输入将包含多个问题实例。输入的第一行将包含一个整数,表示问题实例的数量。每个实例将由 m n1 n2 n3 … nm 形式的单行组成,其中 m 是集合中的整数个数,n1 … nm 是整数。所有整数都是正数,并且在 32 位整数范围内。
输出
对于每个问题实例,输出包含相应 LCM 的单行。所有结果都在 32 位整数范围内。
样例输入
2
2 3 5
3 4 6 12
样例输出
15
12
代码提交
#include <stdio.h>
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
int main(){
int m,i,n,x,y;
scanf("%d",&m);
while(m--){
int a[100]={0};
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=1;i<n;i++){
x=gcd(a[i-1],a[i]);
a[i]=a[i-1]/x*a[i];
}
printf("%d\n",a[i-1]);
}
return 0;
}
最大公约数和最小公倍数算法是差不多的,最小公倍数的求解是在最大公约数的基础上进行,当得到a和b的最大公约数d,最小公倍数是ab/d。