推公式
公差d要是每两个数差的最大公约数
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N];
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
sort(a, a + n);
int x = a[0], y = a[n - 1];
int d = 0; //0与任意数的最大公约数都是其本身
for (int i = 0; i < n - 1; i ++ )
d = gcd(d, a[i + 1] - a[i]);
if (!d) printf("%d\n", n); //公差为0的情况
else printf("%d\n", (y - x) / d + 1);
return 0;
}
这个解释更加详细!!!