小码哥有一个n个整数组成的数组a1,a2,…,an。小码哥可以任取一个正整数k,进行下面的操作:从数列中取一个数ai,将它的值减去k。小码哥进行了若干次(可能是0次)上面的操作后,数列中所有的数都相等了。请你找到k可能的最大值。((如果k可以任意大,输出−1−1))
import java.util.Scanner;
public class Main {
public static int findGCD(int[] arr) {
int result = arr[0];
for (int i = 1; i < arr.length; i++) {
result = findGCD1(result, arr[i]);
}
return result;
}
// 使用辗转相除法求最大公约数
public static int findGCD1(int a, int b) {
if (b == 0) {
return a;
} else if (a == 0) {
return b;
} else {
return findGCD1(b, a % b);
}
}
public static void main(String[] args) {
int n;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
// 循环处理每个输入案例
while (n != 0) {
int min = 0x3f3f3f3f; // 初始化最小值为一个较大的数
int n1 = sc.nextInt();
int a[] = new int[n1];
// 读取数组a并找到最小值min
for (int i = 0; i < n1; i++) {
a[i] = sc.nextInt();
if (min > a[i]) {
min = a[i];
}
}
// 创建数组b,将a中的每个元素减去min
int b[] = new int[n1];
for (int i = 0; i < n1; i++) {
b[i] = a[i] - min;
}
// 检查数组b是否全为0
int flag = 0;
int minb = 0x3f3f3f3f; // 初始化最小值为一个较大的数
for (int i = 0; i < n1; i++) {
if (minb > b[i]) {
minb = b[i];
}
if (b[i] != 0) {
break;
} else if (i == n1 - 1) {
flag = 1;
}
}
// 如果数组b全为,则输出-1
if (flag == 1) {
System.out.println(-1);
n--;
continue;
}
// 找出数组b的最大公约数并输出
int gcd = findGCD(b);
System.out.println(gcd);
n--;
}
}
}