AcWing 1246. 等差数列
原题链接
中等
作者:
戾儿
,
2021-03-28 08:15:54
,
所有人可见
,
阅读 313
(gcd)
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int n,m;
const int N=100010;
int a[N];
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int d=0;
//每一项与第一项的差一定是d的倍数
//当d != 0 时, (a末 - a初) / d + 1 让公差d最大即可
//当d == 0 时,答案为 n
//即求每个数与a[0]的差值的最小公倍数
for(int i=0;i<n;i++)
{
int t=a[i]-a[0];
d=gcd(d,t);
}
if(!d) cout<<n<<endl;
else
{
cout<<(a[n-1]-a[0])/d+1<<endl;
}
return 0;
}