表面上要求计算最小公倍数,实则是用欧几里得算法求LCD。
注意计算顺序,否则溢出!
/*
* HDU-1019 least common multiple
* mike-w
* 2011-8-30
* ------------------------------
* calculate GCD
*/
#include<stdio.h>
long gcd(long e1,long e2)
{
long r=e1%e2;
while(r)
{
e1=e2;
e2=r;
r=e1%e2;
}
return e2;
}
int main(void)
{
int ncase,n,i;
long e1,e2;
#ifndef ONLINE_JUDGE
freopen("1019.in","r",stdin);
#endif
scanf("%d",&ncase);
for(i=1;i<=ncase;i++)
{
scanf("%d",&n);
scanf("%ld",&e1);
n--;
while(n-->0)
{
scanf("%ld",&e2);
e1=e1/gcd(e1,e2)*e2; /* 这里的运算顺序需要注意一下,否则溢出 */
}
printf("%ld\n",e1);
}
return 0;
}
123




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



