Do you know what is called ``Coprime Sequence''? That is a sequence consists of nnpositive integers, and the GCD (Greatest Common Divisor) of them is equal to 1.
``Coprime Sequence'' is easy to find because of its restriction. But we can try to maximize the GCD of these integers by removing exactly one integer. Now given a sequence, please maximize the GCD of its elements.
Input
The first line of the input contains an integer T(1≤T≤10)T(1≤T≤10), denoting the number of test cases.
In each test case, there is an integer n(3≤n≤100000)n(3≤n≤100000) in the first line, denoting the number of integers in the sequence.
Then the following line consists of nn integers a1,a2,...,an(1≤ai≤109)a1,a2,...,an(1≤ai≤109), denoting the elements in the sequence.
Output
For each test case, print a single line containing a single integer, denoting the maximum GCD.
Sample Input
3
3
1 1 1
5
2 2 2 3 2
4
1 2 4 8
Sample Output
1
2
2
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[100000+10];
int b[100000+10];
int gcd(int x,int y){
return y==0?x:(gcd(y,x%y));
}
int main()
{
int t;
cin>>t;
while(t--){
int n;
cin>>n;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;i++){
cin>>a[i];
}
int k,l=0,j,s1,M=0;
b[0]=b[1]=-1;
for(int i=0;i<n;i++){
k=a[0];
if(i==0) k=a[1];
for(j=0;j<n;j++){
if(i==j) continue;
k=gcd(a[j],k);
if(k<=M) break;//优化。。。
if(j==i+1){
if(k==b[j])
break;
}
if(j==i+2) b[j]=k;//if(j==n-1) b[l++]=k;//这样会超时
}
if(M<k) M=k;
}
//sort(b,b+l);
//cout<<b[l-1]<<endl;
cout<<M<<endl;
}
return 0;
}