题目传送门
其实本题就是要找一个整数k,使得 (forall a_i,a_j in A) 且 (i eq j),
满足 (a_imod k eq a_jmod k)
而不满足上述条件的情况为 (exists a_i,a_j,满足a_i=b_1*k+r,a_j=b_2*k+r)
发现它等价于(a_i - a_j = (b_1-b_2)*k)
所以可以得出结论,如果k满足要求,则(forall a_i,a_j in A)都能满足(|a_j-a_i|)不是k的倍数.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,a[5001],sum;
bool vis[1000005];
inline int _read() {
int s = 0,w = 1;
char p = getchar();
while(p < '0' || p > '9') {
if(p == '-1') w = -1;
p = getchar();
}
while(p >= '0' && p <= '9') {
s = s * 10 + (p - '0');
p = getchar();
}
return s * w;
}
int main() {
n = _read();
for(int i = 1;i <= n; i++) {
a[i] = _read();
sum = max(sum,a[i]);
}
for(int i = 1;i <= n; i++)
for(int j = i + 1;j <= n; j++)
vis[abs(a[j] - a[i])] = 1;
for(int i = n;i <= sum; i++) {
if(!vis[i]) {
for(int j = i + i;j <= sum; j += i)
if(vis[j]) {
vis[i] = 1;
break;
}
}
if(!vis[i]) {
printf("%d",i);
return 0;
}
}
return 0;
}