题目描述
等差数列 - 蓝桥云课 (lanqiao.cn)
知识点:
排序找出最大公约数则为公差
项数: n = (第n项值-首项) / 公差 +1。 n = (an-a1) / d+1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
int a[N], n;
int gcd(int a, int b)
{
return a ? gcd(b % a, a) : b;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i ++)
{
cin >> a[i];
}
sort(a + 1, a + 1 + n);
int d = 0;
for(int i = 2; i <= n; i ++)
{
d = gcd(d, a[i] - a[i - 1]);
}
if(d == 0)cout << n;
else cout << (a[n] - a[1]) / d + 1;
return 0;
}