题目传送门
#include<algorithm>
#include<iostream>
#include<map>
using namespace std;
long long n,a[10005],mn=1e15,cnt,sum=0;
map<int,bool> MP;
void go_to_check(int x){
map<int,bool> mp;
cnt=0;
for(int i=1;i<=n;i++){
if(!mp[a[i]%x]) cnt++;
if(cnt>3) return;
mp[a[i]%x]=true;
}
sum+=x;
if(!MP[x]){
}
else{
sum-=x;
}
MP[x]=true;
}
void go_work(int x){
for(int i=1;i*i<x;i++){
if(i>mn/4) break;
if(x%i==0){
go_to_check(i);
go_to_check(x/i);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
mn=min(mn,a[i]);
}
sort(a+1,a+n+1);
long long len=unique(a+1,a+1+n)-a-1;
if(len<=3){
cout<<1ll*(mn/4)*(mn/4+1)/2;
return 0;
}
go_work(abs(a[2]-a[1]));
go_work(abs(a[3]-a[1]));
go_work(abs(a[4]-a[1]));
go_work(abs(a[3]-a[2]));
go_work(abs(a[4]-a[2]));
go_work(abs(a[4]-a[3]));
cout<<sum;
return 0;
}
死亡证明