思路:
首先进行排序,然后第一个最小,进行求差,然后求最大的一个,才能最短
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
int a[100];//存放
int gcd(int a,int b)//求最大公约数
{
if(b==0)return a;
else
return gcd(b,a%b);
}
int main()
{
int n,_gcd;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);//排序
int gcd_max=a[1]-a[0];
if(gcd_max==0)//公差为0
{
cout<<n;
return 0;
}
else
{
_gcd=a[1]-a[0];
for(int i=2;i<n;i++)
{
_gcd=gcd(_gcd,a[i]-a[i-1]);//将每个数与前一个数作差,求差与差的最大公约数 ,
}
}
cout<<(a[n-1]-a[0])/_gcd+1;
return 0;
}