AcWing
1246. 等差数列
假设:$a[0]$、$a[1]$、$\cdots$、$a[n-1]$是排序后的缺失等差数列,$d$是排序后的缺失等差数列中 每对相邻数的差值的 最大公约数,则:
$res=\frac{a[n-1] - a[0]}{d}+1$
最大公约数板子:
int gcd(int a, int b){ // a、b顺序任意
return b ? gcd(b, a % b) : a;
}
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
const int N = 100010;
int a[N];
int gcd(int a, int b){ return b ? gcd(b, a % b) : a; }
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
for(int i = 0; i <= n - 1; i ++) cin >> a[i];
sort(a, a + n);
int d = 0;
for(int i = 1; i <= n - 1; i ++) d = gcd(d, a[i] - a[i - 1]);
int res;
if(d) res = (a[n - 1] - a[0]) / d + 1;
else res = n;
cout << res;
return 0;
}