1246. 等差数列

阅读 78

2022-03-20

1246. 等差数列

a[i] = a[1] + (i - 1) * d
所以和a[1] 与 d有关系。
最大公差就是 所有a[i] - a[1] 的最大公约数

d = gcd(d, a[i] - a[1])
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+ 10;
int a[N];
int n;
int gcd(int a,int b)
{
	while(b)
	{
		int c = a;
		a = b;
		b = c % a;
	}
	return a;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    int d =0;
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++)
    {
        d =gcd(d,a[i] - a[1]);
    }
    if(d == 0) printf("%d",n);
    else printf("%d",(a[n] - a[1]) / d + 1 );
}

难了不会,会了不难。

精彩评论(0)

0 0 举报