1. 加同一个数不改变差值 对于任意两个下标 都有 因此,经过加法后的所有数的任何公约数必须同时整除原来的所有差值

  2. 可实现的 必为差值的最大公约数的约数 任何一个满足 的整数 必须整除所有的差值,从而 . 于是可得到的最大可能的 正好是 本身。

  3. 如何求出对应的 由于 是所有差值的公约数,所有原始数在模 意义下具有相同的余数 为了让所有数都变成 的倍数,只需把每个数再加 (模 的最小非负解),即 此时 . 又因任何满足条件的 必须满足同余式 正是最小的非负整数解。

综上,最大的可能 就是所有两两差值的最大公约数 ,而得到它的最小

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<ll> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];

    sort(a.begin(), a.end());
    ll g = a[1] - a[0];
    for (int i = 2; i < n; i++) {
        g = gcd(g, a[i] - a[0]);
    }
    ll r = a[0] % g;
    ll k = (g - r) % g;
    cout << g << " " << k << endl;
}