#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; } |
English