题目

image-1670239964414

题解

等差数列的公差肯定是每项的公约数,要使项数最少,那么只需要公差是每项的最大公约数即可。
若d=0,说明是每项都相等,直接输出n;

#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int n;
int a[N];
int gcb(int a,int b){
    return b?gcb(b,a%b):a;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    sort(a,a+n);
    int d=0;
    for(int i=1;i<n;i++)d=gcb(d,a[i]-a[0]);
    if(!d)cout<<n<<endl;
    else cout<<(a[n-1]-a[0])/d+1<<endl;
    
    return 0;
}