//求最小公倍数
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e5+10;
int ans[N],cnt[N],len;
//ans记录答案,cnt记录因子的次方
void multiply(int fact)
{
int i;
for(i=0;i<len;i++)
ans[i]*=fact;
for(i=0;i<len;i++)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
int tmp=ans[len];
while(tmp)
{
ans[len++]=tmp%10;
tmp/=10;
}
}
int main()
{
//freopen("in.txt","r",stdin);
int i,t,CASE(0),n,tmp;
scanf("%d",&t);
while(t--)
{
memset(cnt,0,sizeof(cnt));
memset(ans,0,sizeof(ans));
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&tmp);
int fact=2;//初始化因子为2
while(tmp!=1)//利用唯一分解定理进行拆分
{
int num=0;
while(tmp%fact==0)
num++,tmp/=fact;
cnt[fact]=max(cnt[fact],num);
fact++;
}
}
ans[0]=len=1;
for(i=2;i<=1e4;i++)
if(cnt[i])multiply(pow(i,cnt[i]));//将拆分的数乘回去
printf("Case %d: ",++CASE);
for(i=len-1;i>0;i--)
printf("%d",ans[i]);
printf("%d\n",ans[0]);
}
return 0;
}
【题解】LightOJ1024 最小公倍数
最新推荐文章于 2018-09-12 20:27:28 发布