https://codeforces.com/contest/1593/problem/D1
分析
求最大公因子。
#include <bits/stdc++.h>
using namespace std;
#define LL long long
int t,n,a[45],d[45];
int find(int a,int b)
{
if(a>b)swap(a,b);
int r=b%a;
while(r)
{
b=a;
a=r;
r=b%a;
}
return a;
}
int judge(int j)
{
int i=j,a=d[j],b=0;
for(;i<n-1;i++)
{
if(d[i]!=d[j])
{
b=d[i];
break;
}
}
if(i==n-1)return d[j];
int now_ans=find(a,b);
for(;i<n-1;i++)now_ans=find(now_ans,d[i]);
return now_ans;
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
sort(a,a+n);
for(int i=0;i<n-1;i++)d[i]=a[i+1]-a[0];
sort(d,d+n-1);
if(d[n-2]==0)printf("-1\n");
else
{
int j=0;
while(d[j]==0)j++;
int ans=judge(j);
printf("%d\n",ans);
}
}
return 0;
}