思路:先找到数列的最小值和最大值,每个元素与最小值的差值就为kd,那么公差就是这些差值的最小公因数,项数为(最大值-最小值)/ 公差 + 1
代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100005;
int n;
int a[N];
int r;
int la=0,fi=1e9;
int gcd(int a,int b)
{
return b ? gcd(b,a%b) : a;
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>a[i];
fi=min(fi,a[i]);
la=max(la,a[i]);
}
//sort(a+1,a+n+1);
for(int i=2;i<=n;++i)
{
r=gcd(r,a[i]-fi);
}
if(!r) cout<<n;
else cout<<(la-fi)/r+1;
return 0;
}