公因子(gcd性质)
思路:
性质:
推广:
所以此题的 的 不能改变了,所以此题的
同时又要使 满足有因子 ,所以
这样就能取最小的 。
另外此题有个坑,差分数组可能有负数,会发生除0错误的情况,取一下绝对值即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5,M=1e6+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a) memset(a,0,sizeof a)
#define lx x<<1
#define rx x<<1|1
#define reg register
#define PII pair<int,int>
#define fi first
#define se second
ll a[N];
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=n;i>1;i--) a[i]=abs(a[i]-a[i-1]);
ll ans=0;
for(int i=2;i<=n;i++) ans=gcd(ans,a[i]);
printf("%lld %lld\n",ans,(ans-a[1]%ans)%ans);
return 0;
}