Problem Link:http://acm.hdu.edu.cn/showproblem.php?pid=1019
原题:
Least Common Multiple
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30183 Accepted Submission(s): 11417
2 3 5 7 15 6 4 10296 936 1287 792 1
105 10296
--------------------------------------------------------------------------------------------------------------------------------------------
#include<stdio.h>
int gcd(int a,int b)//欧几里德求最大公约数
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main()
{
int cas,n,x,y,t,i;
while(scanf("%d",&cas)!=EOF)
{
while(cas--)
{
scanf("%d%d",&n,&x);
for(i=2;i<=n;i++)
{
scanf("%d",&y);
if(y>x)
{
t=y;
y=x;
x=t;
}
x=x/gcd(x,y)*y;//最小公倍数=两数之积/最大公约数(注意:这里换一下顺序,先除后乘,以免数据溢出)
}
printf("%d\n",x);
}
}
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------------