#include<bits/stdc++.h>
using namespace std;
int gcd(int m, int n)
{
while(m>0)
{
int c = n % m;
n = m;
m = c;
}
return n;
}
//网上的代码晦涩难懂,我自己先写个题解吧
//为什么要求前缀,后缀?是因为我们暴力枚举每一个数都要比较前半部分(就是gcd前缀)和后半部分(就是gcd后缀)的gcd,是因为求
//最大gcd,所以用max。
int main()
{
int t;
cin >> t;
while(t--)
{
int before[100005];
int last[100005];
int ans;
int n;
int a[100005];
cin >> n;
for(int i = 1; i <=n ;i++) //下标从1开始
{
cin >> a[i];
}
sort(a+1,a+n);
before[0] = last[n+1] = 0;//没有前缀和后缀所以是0
before[1] = a[1];
last[n] = a[n];//举个例子吧 只有一个数 它的前缀和后缀都是其本身
for(int i = 2;i <= n;i++)
{
before[i] =gcd(before[i-1],a[i]);
}//前缀
for(int i = n- 1; i>= 1;i--)
{
last[i] = gcd(last[i+1],a[i]);
}//后缀
ans = max(before[n],last[1]); //比较去掉第一个和最后一个
for(int i =1;i <=n;i++)
{
ans = max(ans,gcd(before[i-1],last[i+1]));//枚举删除每一个数
}
cout << ans << endl;
}
}
using namespace std;
int gcd(int m, int n)
{
while(m>0)
{
int c = n % m;
n = m;
m = c;
}
return n;
}
//网上的代码晦涩难懂,我自己先写个题解吧
//为什么要求前缀,后缀?是因为我们暴力枚举每一个数都要比较前半部分(就是gcd前缀)和后半部分(就是gcd后缀)的gcd,是因为求
//最大gcd,所以用max。
int main()
{
int t;
cin >> t;
while(t--)
{
int before[100005];
int last[100005];
int ans;
int n;
int a[100005];
cin >> n;
for(int i = 1; i <=n ;i++) //下标从1开始
{
cin >> a[i];
}
sort(a+1,a+n);
before[0] = last[n+1] = 0;//没有前缀和后缀所以是0
before[1] = a[1];
last[n] = a[n];//举个例子吧 只有一个数 它的前缀和后缀都是其本身
for(int i = 2;i <= n;i++)
{
before[i] =gcd(before[i-1],a[i]);
}//前缀
for(int i = n- 1; i>= 1;i--)
{
last[i] = gcd(last[i+1],a[i]);
}//后缀
ans = max(before[n],last[1]); //比较去掉第一个和最后一个
for(int i =1;i <=n;i++)
{
ans = max(ans,gcd(before[i-1],last[i+1]));//枚举删除每一个数
}
cout << ans << endl;
}
}