#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
#define inf 0x3f3f3f
using namespace std;
__int64 lcm(__int64 x ,__int64 y)
{
__int64 ex,a,b;
a = max(x,y);
b = min(x,y);
while(b != 0)
{
ex = a%b;
a = b;
b = ex;
}
// printf("%I64d\n",x*y/a);
return x*y/a;
}
__int64 n,test,ans,a[10000];
bool vis;
int main()
{
while(scanf("%d",&test) != EOF)
{
while(test--)
{
scanf("%d",&n);
for(int i = 1 ; i <= n ;i++)
scanf("%d",&a[i]);
ans = a[1];
for(int i = 2 ; i <= n ;i++)
{
ans = lcm(ans ,a[i]);
vis = 1;
for(int j = 1 ; j <= n ;j++)
{
if(ans % a[j] != 0)
{
vis = 0;
break;
}
}
if(vis != 0)break;
}
printf("%I64d\n",ans);
}
}
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
#define inf 0x3f3f3f
using namespace std;
__int64 lcm(__int64 x ,__int64 y)
{
__int64 ex,a,b;
a = max(x,y);
b = min(x,y);
while(b != 0)
{
ex = a%b;
a = b;
b = ex;
}
// printf("%I64d\n",x*y/a);
return x*y/a;
}
__int64 n,test,ans,a[10000];
bool vis;
int main()
{
while(scanf("%d",&test) != EOF)
{
while(test--)
{
scanf("%d",&n);
for(int i = 1 ; i <= n ;i++)
scanf("%d",&a[i]);
ans = a[1];
for(int i = 2 ; i <= n ;i++)
{
ans = lcm(ans ,a[i]);
vis = 1;
for(int j = 1 ; j <= n ;j++)
{
if(ans % a[j] != 0)
{
vis = 0;
break;
}
}
if(vis != 0)break;
}
printf("%I64d\n",ans);
}
}
}
找多个数的最小公倍数,可以直接将a[1]和a[2]的公倍数分别对3-n的全部数求一次公倍数即刻,当然,公倍数的求法采用辗转相除求最大公约数的方式。
因为最小公倍数*最大公约数=两数的乘积