大体思路是先求出1,2个数的LCM2,再求LCM2和第3个数的LCM=LCM3,以此类推。
需要注意n=1的情况。
注意题中给的数据范围,为防溢出lcm=a/gcd(a,b)*b 而不是 lcm=a*b/gcd(a,b)(除非你用long long/int64
)
时间:0毫秒
#include "stdio.h"
int GCD(int a,int b){
return (b==0)?a:GCD(b,a%b);
}
int main(){
int t,n,i,j,a,b,gcd,lcm;
scanf("%d",&t);
for(i=1;i<=t;i++){
scanf("%d",&n);
if(n==1){
scanf("%d",&a);
printf("%d\n",a);
continue;
}
scanf("%d%d",&a,&b);
gcd=GCD(a,b);lcm=a/gcd*b;a=b;
for(j=3;j<=n;j++){
scanf("%d",&b);
gcd=GCD(lcm,b);
lcm=lcm/gcd*b;
}
printf("%d\n",lcm);
}
return 0;
}
本文介绍了一种求多个整数最小公倍数(LCM)的算法实现,通过逐步求两个数的LCM来得到多个数的LCM,并提供了一个完整的C语言程序示例。

被折叠的 条评论
为什么被折叠?



