#include <bits/stdc++.h> #define int long long #define pii pair<int, int> #define piii pair<pair<int,int>, int> #define st first.first #define nd first.second #define rd second #define For(i, l, r) for (int i = l; i <= r; i++) #define Forcin(l, r, a) \ for (int i = l; i <= r; i++) \ cin >> a[i]; #define Ford(i, l, r) for (int i = l; i >= r; i--) #define ben(v) v.begin(), v.end() #define LOCAL 0 #define LOCAL2 0 using namespace std; const int M = 20005, inf=1e9; int sq[M]; bool is_square[M*M]; signed main() { cin.tie(0)->sync_with_stdio(); if (LOCAL) freopen("a.txt", "r", stdin); if (LOCAL2) freopen("local_out.txt", "w", stdout); int n=5000; cin>>n; For(i, 1, 3*n){ sq[i]=i*i; is_square[sq[i]]=1; } long double thres=1e-10; //set<pair<pii, pii>>s; map <int, int> res; res[0]=0; res[1000]=167451; res[2000]=671258; res[2400]=966956; res[2600]=1134938; res[2800]=1317249; res[3000]=1511687; res[3250]=1775308; res[3400]=1942671; res[3600]=2178198; res[3750]=2363429; res[3850]=2491905; res[4000]=2689609; res[4100]=2825469; res[4175]=2930678; res[4250]=3034969; res[4300]=3108002; res[4400]=3253989; res[4500]=3404222; res[4600]=3557990; res[4700]=3714217; res[4800]=3873140; res[4900]=4037040; res[4950]=4120666; res[50010]=inf; int c=0; auto it=res.upper_bound(n); it--; auto [pos, val]=*it; c=val; For(d, pos+1, n){ For(a, 1, d){ For(b, a, d){ if (sq[a]+sq[b]>=sq[d]) break; int h=sq[d]-sq[a]-sq[b]; if (is_square[h] && sq[b]<=h){ c+=3; if (a==b||sq[b]==h) c--; } } } } /* For(a, 1, n){ For(b, a, n){ int gd=__gcd(a, b); For(h, b, n){ int sum=sq[a]+sq[b]+sq[h]; if (sum>sq[n]) break; if (is_square[sum]){ c+=3; if (a==b||b==h) c--; //s.insert({{d, h}, {a, b}}); //cout << a<<' '<<b<<' '<<h<<' '<<(int)sqrt(sum)<<'\n'; } } } } */ cout << c; }
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include <bits/stdc++.h> #define int long long #define pii pair<int, int> #define piii pair<pair<int,int>, int> #define st first.first #define nd first.second #define rd second #define For(i, l, r) for (int i = l; i <= r; i++) #define Forcin(l, r, a) \ for (int i = l; i <= r; i++) \ cin >> a[i]; #define Ford(i, l, r) for (int i = l; i >= r; i--) #define ben(v) v.begin(), v.end() #define LOCAL 0 #define LOCAL2 0 using namespace std; const int M = 20005, inf=1e9; int sq[M]; bool is_square[M*M]; signed main() { cin.tie(0)->sync_with_stdio(); if (LOCAL) freopen("a.txt", "r", stdin); if (LOCAL2) freopen("local_out.txt", "w", stdout); int n=5000; cin>>n; For(i, 1, 3*n){ sq[i]=i*i; is_square[sq[i]]=1; } long double thres=1e-10; //set<pair<pii, pii>>s; map <int, int> res; res[0]=0; res[1000]=167451; res[2000]=671258; res[2400]=966956; res[2600]=1134938; res[2800]=1317249; res[3000]=1511687; res[3250]=1775308; res[3400]=1942671; res[3600]=2178198; res[3750]=2363429; res[3850]=2491905; res[4000]=2689609; res[4100]=2825469; res[4175]=2930678; res[4250]=3034969; res[4300]=3108002; res[4400]=3253989; res[4500]=3404222; res[4600]=3557990; res[4700]=3714217; res[4800]=3873140; res[4900]=4037040; res[4950]=4120666; res[50010]=inf; int c=0; auto it=res.upper_bound(n); it--; auto [pos, val]=*it; c=val; For(d, pos+1, n){ For(a, 1, d){ For(b, a, d){ if (sq[a]+sq[b]>=sq[d]) break; int h=sq[d]-sq[a]-sq[b]; if (is_square[h] && sq[b]<=h){ c+=3; if (a==b||sq[b]==h) c--; } } } } /* For(a, 1, n){ For(b, a, n){ int gd=__gcd(a, b); For(h, b, n){ int sum=sq[a]+sq[b]+sq[h]; if (sum>sq[n]) break; if (is_square[sum]){ c+=3; if (a==b||b==h) c--; //s.insert({{d, h}, {a, b}}); //cout << a<<' '<<b<<' '<<h<<' '<<(int)sqrt(sum)<<'\n'; } } } } */ cout << c; } |