2 条题解

  • 0
    @ 2026-4-5 11:18:09

    变形得到 a2=(c+b)(c−b)a^2 = (c + b) (c - b),枚举 a2a^2 的因数即可。

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
    	long long n;
    	cin >> n;
    	n *= n;
    	for (long long i = 1; i * i < n; i++)
    		if (n % i == 0 && i % 2 == n / i % 2)
    			cout << (n / i - i) / 2 << ' ' << (n / i + i) / 2 << endl;
    	return 0;
    }
    
    • 0
      @ 2026-4-5 10:17:22

      数学题,分析如下:

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

      设 d=c−bd = c - b,e=c+be = c + b。

      a2=dea ^ 2 = de

      由性质可得:

      d≡e(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;
      }
      
      • 1

      信息

      ID
      245
      时间
      1000ms
      内存
      512MiB
      难度
      2
      标签
      递交数
      5
      已通过
      5
      上传者