#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = a; i < (b); ++i) #define ALL(x) begin(x), end(x) #define SZ(x) (int)(x).size() #define st first #define nd second typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<int> vi; typedef vector<ll> vl; #ifdef LOCAL #define DTP(x, y) \ auto operator<<(auto &o, auto a)->decltype(y, o) \ { \ o << "("; \ x; \ return o << ")"; \ } DTP(o << a.first << ", " << a.second, a.second); DTP(for (auto i : a) o << i << ", ", ALL(a)); void dump(auto... x) { ((cerr << x << ", "), ...) << '\n'; } #define debug(x...) cerr << setw(4) << __LINE__ << ":[" #x "]: ", dump(x) #else #define debug(...) 42 #endif void solve() { int n; cin >> n; vi U(n * n + 1, 0); for (int i = 1; i < SZ(U); i++) { int cnt = 0, t = i; while (!(t & 1)) { t /= 2; cnt++; } U[i] = cnt & 1; } // debug(V); // debug(U); vi S(n * n + 1, 0); for (int i = 1; i < SZ(S); i++) { // debug(S); int why = sqrt(i); if (why * why == i || (why + 1) * (why + 1) == i || (why - 1) * (why - 1) == i) S[i]--; for (int j = 1; j * i < SZ(S); j++) { if ((i & 3) == 1) S[i * j]++; else if ((i & 3) == 3) S[i * j]--; } } for (int i = 1; i < SZ(S); i++) S[i] = (S[i] + U[i]) / 2; // debug(S); vl ANS(n + 1, 0); for (int i = 1; i <= n; i++) { if (!(i & 1)) { ANS[i] = ANS[i / 2]; continue; } for (int j = 1; j < i; j++) { int val = i * i - j * j; // if (V[val]) { // debug(i, j, val); ANS[i] += S[val]; } } } // for (auto &a : ANS) // cout << ',' << a; // cout << endl; // debug(ANS); ll ans = 0; for (auto &a : ANS) ans += a; cout << ans << endl; } main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int Z = 1; // cin >> Z; while (Z--) solve(); }
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 102 103 104 | #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = a; i < (b); ++i) #define ALL(x) begin(x), end(x) #define SZ(x) (int)(x).size() #define st first #define nd second typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<int> vi; typedef vector<ll> vl; #ifdef LOCAL #define DTP(x, y) \ auto operator<<(auto &o, auto a)->decltype(y, o) \ { \ o << "("; \ x; \ return o << ")"; \ } DTP(o << a.first << ", " << a.second, a.second); DTP(for (auto i : a) o << i << ", ", ALL(a)); void dump(auto... x) { ((cerr << x << ", "), ...) << '\n'; } #define debug(x...) cerr << setw(4) << __LINE__ << ":[" #x "]: ", dump(x) #else #define debug(...) 42 #endif void solve() { int n; cin >> n; vi U(n * n + 1, 0); for (int i = 1; i < SZ(U); i++) { int cnt = 0, t = i; while (!(t & 1)) { t /= 2; cnt++; } U[i] = cnt & 1; } // debug(V); // debug(U); vi S(n * n + 1, 0); for (int i = 1; i < SZ(S); i++) { // debug(S); int why = sqrt(i); if (why * why == i || (why + 1) * (why + 1) == i || (why - 1) * (why - 1) == i) S[i]--; for (int j = 1; j * i < SZ(S); j++) { if ((i & 3) == 1) S[i * j]++; else if ((i & 3) == 3) S[i * j]--; } } for (int i = 1; i < SZ(S); i++) S[i] = (S[i] + U[i]) / 2; // debug(S); vl ANS(n + 1, 0); for (int i = 1; i <= n; i++) { if (!(i & 1)) { ANS[i] = ANS[i / 2]; continue; } for (int j = 1; j < i; j++) { int val = i * i - j * j; // if (V[val]) { // debug(i, j, val); ANS[i] += S[val]; } } } // for (auto &a : ANS) // cout << ',' << a; // cout << endl; // debug(ANS); ll ans = 0; for (auto &a : ANS) ans += a; cout << ans << endl; } main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int Z = 1; // cin >> Z; while (Z--) solve(); } |