数学题,分析如下:

a2+b2=c2a ^ 2 + b ^ 2 = c ^ 2 a2=(cb)(c+b)a ^ 2 = (c - b)(c + b)

d=cbd = c - be=c+be = c + b

a2=dea ^ 2 = de

由性质可得:

de(mod2)d \equiv e \pmod 2

然后枚举 dd 即可。

AC code:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair

int main() {
    ll a;
    cin >> a;
    vector<pair<ll, ll>> res;
    if (a != 1) {
        ll a2 = a * a;
        for (ll d = 1; d * d <= a2; ++d) {
            if (a2 % d != 0) continue;
            ll e = a2 / d;
            if ((d + e) % 2 != 0) continue;
            ll b = (e - d) / 2, c = (e + d) / 2;
            if (b > 0) {
                res.pb(mp(b, c));
            }
        }
    }
    sort(res.begin(), res.end(), [](const pair<ll, ll>& x, const pair<ll, ll>& y) {
        return x.first > y.first;
    });
    for (int i = 0; i < res.size(); ++i) {
        cout << res[i].first << ' ' << res[i].second << endl;
    }
    return 0;
}