题解 | 一道GCD问题

这道题其实完全可以找规律得出来的

比如4 6 9(样例)之所以不行,是因为4和6差2,6和9差3,而2和3没有公因数(除了1)

比如再举个例子,3 8 18,分别差了5和10,就有最大公因数---5

所以这道题的关键就在于找到两个数的差是不是存在最小公因数且一直都是这同一个最小公因数就可以啦

怎么找呢?就是

 temp = gcd(temp, a[i] - a[i - 1]);

如果最后发现没有除了1以外的最小公倍数,那么就是不存在了;反之,直接输出

最后附上ac代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> a(n + 1);
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    sort(a.begin(), a.end());
    int temp = a[2] - a[1];
    for (int i = 3; i <= n; i++)
    {
        temp = gcd(temp, a[i] - a[i - 1]);
    }

    if (temp == 1)
        cout << "1 0";
    else
        cout << temp << " " << temp - (a[1] % temp);
}

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务