题目链接:点击打开链接
题目要求求n个数的最小公约数,可以依次求出每个数的最大公倍数,然后两数相乘再除以gcd。
开始是数组接受后遍历,莫名其秒WA两次,又放在输入中直接求的,就过了,可能有小细节没处理好。
有用到欧几里得算法。
下面是大神对欧几里得算法以及扩展欧几里得的解释。点击打开链接
代码实现:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
long long gcd(long long a,long long b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
int main()
{
long long n,i,j,t;
int a[100005];
cin>>t;
while(t--)
{
cin>>n;
long long temp=1;
for(i=0;i<n;i++)
{
cin>>a[i];
temp=(temp*a[i])/gcd(temp,a[i]);
}
cout<<temp<<endl;
}
return 0;
}