题目链接
解题思路:
求等差数列的公式
a[n] = a[1] + (n-1)*d
那么 求 n 就成了 ( a[n] - a[1] / d ) + 1
要想 n 小 d 就要大 题目给出的 n项中 每个之间的差值都是 d 的倍数 所以求 差值之间的最大公约数即可
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
ll a[maxn];
ll gcd(ll a,ll b)
{
ll c;
while(b>0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int n;
int i,j,k,x=0,y;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
if(a[1]==a[n])
cout<<n<<endl;
else
{
k=a[2]-a[1];
for(i=3;i<=n;i++)
{
k=gcd(k,a[i]-a[i-1]);
}
cout<<(a[n]-a[1])/k+1<<endl;
}
return 0;
}
版权声明:本文为weixin_43819762原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。