1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <vector>
using namespace std;

int main(){
    int n;
    cin >> n;
    int maxS = n * n;
    vector< vector< pair<int,int> > > sumPairs(maxS + 1);
    for (int a = 1; a <= n; a++){
        for (int b = a; b <= n; b++){
            int s = (a * a) + (b * b);
            if (s > maxS){
                break;
            }
            sumPairs[s].push_back(make_pair(a, b));
        }
    }
    
    long long ans = 0;
    for (int diag = 1; diag <= n; diag++){
        for (int h = 1; h < diag; h++){
            int S = (diag * diag) - (h * h);
            if (S > maxS){
                continue;
            }
            for (size_t i = 0; i < sumPairs[S].size(); i++){
                /* pair<int,int> p = sumPairs[S][i];
                cout << "a = " << p.first << ", b = " << p.second << ", h = " << h << "\n"; */
                ans++;
            }
        }
    }
    
    cout << ans;
    return 0;
}