思路
如果你随便试几个数,你就会发现这个等差数列的公差其实就是这个数列里从小到大两个数之差的最大公因数。
举个栗子: 397115
对他进行排序 137915
求相邻两数之差分别为 2426
计算易得最大公因数为 2
最后再用我们小学二年级就学过的等差数列项数公式
s=d(b−a)+1
其中 s 为项数, a 为首项, b 为末项, d 为公差
AC 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <bits/stdc++.h> using namespace std;
int n,a[100005]={0},d,dt;
int gcd(int a,int b){ if(a==b) return a; if(a>b) return gcd(a-b,b); if(a<b) return gcd(b-a,a); }
int main(){ cin >> n; for(int i=1;i<=n;i++){ cin >> a[i]; } sort(a+1,a+n+1); d = a[2]-a[1]; for(int i=2;i<=n;i++){ dt = a[i]-a[i-1]; d = gcd(d,dt); } if(d==0) cout << n; else cout << (a[n]-a[1])/d+1; return 0; }
|
AC 记录