#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
using namespace __gnu_pbds;
using namespace std;
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef long double ld;
const ll I = 1000'000'000'000'000'000LL;
const int II = 2'000'000'000;
const ll M = 1000'000'007LL;
const int N = 1000'007;
int il[N];
vector<pair<pair<int, int>, int>> v;
void Solve()
{
int n;
cin >> n;
int lim = 1;
while((lim + 1) * (lim + 1) <= n) ++lim;
for(int i = 0; i <= lim; ++i)
for(int j = 0; j <= lim; ++j)
for(int k = 0; k <= lim; ++k)
for(int l = 0; l <= lim; ++l)
{
if((i + j + k + l) % 2 == 0) continue;
if(gcd(gcd(i, j), gcd(k, l)) > 1) continue;
int a = i * i + j * j - k * k - l * l;
int b = 2 * (i * l + j * k);
int c = 2 * (j * l - i * k);
if(a == 0) continue;
if(b == 0) continue;
if(c == 0) continue;
if(a < 0) a *= -1;
if(b < 0) b *= -1;
if(c < 0) c *= -1;
if(gcd(a, gcd(b, c)) > 1)
continue;
//cout << "g: " << a << " " << b << " | " << c << "\n";
if(i * i + j * j + k * k + l * l > n) continue;
v.pb(make_pair(make_pair(a, b), c));
v.pb(make_pair(make_pair(a, c), b));
v.pb(make_pair(make_pair(c, b), a));
}
for(int i = 0; i < (int)v.size(); ++i)
if(v[i].st.st > v[i].st.nd)
swap(v[i].st.st, v[i].st.nd);
sort(v.begin(), v.end());
ll ans = 0;
for(int i = 0; i < (int)v.size(); ++i)
{
if(i > 0 && v[i] == v[i - 1]) continue;
int a = v[i].st.st * v[i].st.st + v[i].st.nd * v[i].st.nd + v[i].nd * v[i].nd;
//cout << v[i].st.st << " " << v[i].st.nd << " | " << v[i].nd << " || " << a << " " << n * n << " " << ans << "\n";
int x = sqrt(a);
while(x * x > a) --x;
while((x + 1) * (x + 1) <= a) ++x;
ans += (ll)(n / x);
}
cout << ans << "\n";
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
//int t; cin >> t;
//while(t--)
Solve();
return 0;
}
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 | #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> using namespace __gnu_pbds; using namespace std; #define pb push_back #define st first #define nd second typedef long long ll; typedef long double ld; const ll I = 1000'000'000'000'000'000LL; const int II = 2'000'000'000; const ll M = 1000'000'007LL; const int N = 1000'007; int il[N]; vector<pair<pair<int, int>, int>> v; void Solve() { int n; cin >> n; int lim = 1; while((lim + 1) * (lim + 1) <= n) ++lim; for(int i = 0; i <= lim; ++i) for(int j = 0; j <= lim; ++j) for(int k = 0; k <= lim; ++k) for(int l = 0; l <= lim; ++l) { if((i + j + k + l) % 2 == 0) continue; if(gcd(gcd(i, j), gcd(k, l)) > 1) continue; int a = i * i + j * j - k * k - l * l; int b = 2 * (i * l + j * k); int c = 2 * (j * l - i * k); if(a == 0) continue; if(b == 0) continue; if(c == 0) continue; if(a < 0) a *= -1; if(b < 0) b *= -1; if(c < 0) c *= -1; if(gcd(a, gcd(b, c)) > 1) continue; //cout << "g: " << a << " " << b << " | " << c << "\n"; if(i * i + j * j + k * k + l * l > n) continue; v.pb(make_pair(make_pair(a, b), c)); v.pb(make_pair(make_pair(a, c), b)); v.pb(make_pair(make_pair(c, b), a)); } for(int i = 0; i < (int)v.size(); ++i) if(v[i].st.st > v[i].st.nd) swap(v[i].st.st, v[i].st.nd); sort(v.begin(), v.end()); ll ans = 0; for(int i = 0; i < (int)v.size(); ++i) { if(i > 0 && v[i] == v[i - 1]) continue; int a = v[i].st.st * v[i].st.st + v[i].st.nd * v[i].st.nd + v[i].nd * v[i].nd; //cout << v[i].st.st << " " << v[i].st.nd << " | " << v[i].nd << " || " << a << " " << n * n << " " << ans << "\n"; int x = sqrt(a); while(x * x > a) --x; while((x + 1) * (x + 1) <= a) ++x; ans += (ll)(n / x); } cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); //int t; cin >> t; //while(t--) Solve(); return 0; } |
English