C.公因子
题意:
给定长度为n的数组a,要求找到一个整数x,满足gcd(a(i)+x)最大,同时x尽可能小
数据范围:n<=1e6,-1e18<=a(i)<=1e18
解法:
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=1e6+5;
int mark[maxm];
int a[maxm];
int b[maxm];
int n;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++){
b[i]=a[i]-a[i-1];
}
int g=0;
for(int i=2;i<=n;i++){
g=gcd(g,b[i]);
}
cout<<g<<' ';
if(b[1]%g==0){
cout<<0<<endl;
}else{
if(b[1]<0)cout<<-b[1]%g<<endl;
else cout<<g-b[1]%g<<endl;
}
return 0;
}