#include <cmath> #include <cstdint> #include <iostream> int main() { int N; std::cin >> N; int64_t res = 0; int64_t curr = 1; int64_t currP = 1; int64_t nextP = 4; for (int64_t i = 1; i * i <= N * N - i * i - i * i; ++i) { curr = sqrt(3 * i * i); currP = curr * curr; nextP = (curr + 1) * (curr + 1); for (int64_t j = i; j * j <= N * N - i * i - j * j; ++j) { curr = sqrt(2 * i * i + j * j); currP = curr * curr; nextP = (curr + 1) * (curr + 1); for (int64_t k = j; k * k <= N * N - j * j - i * i; ++k) { int64_t x = i * i + j * j + k * k; // while (x < currP) { // curr--; // currP = curr * curr; // nextP = (curr + 1) * (curr + 1); // } while (x >= nextP) { curr++; currP = curr * curr; nextP = (curr + 1) * (curr + 1); } if (x == currP) { if (i == j && j == k) { res += 1; } else if (i == j || j == k) { res += 2; } else { res += 3; } } } } } std::cout << res << std::endl; 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 | #include <cmath> #include <cstdint> #include <iostream> int main() { int N; std::cin >> N; int64_t res = 0; int64_t curr = 1; int64_t currP = 1; int64_t nextP = 4; for (int64_t i = 1; i * i <= N * N - i * i - i * i; ++i) { curr = sqrt(3 * i * i); currP = curr * curr; nextP = (curr + 1) * (curr + 1); for (int64_t j = i; j * j <= N * N - i * i - j * j; ++j) { curr = sqrt(2 * i * i + j * j); currP = curr * curr; nextP = (curr + 1) * (curr + 1); for (int64_t k = j; k * k <= N * N - j * j - i * i; ++k) { int64_t x = i * i + j * j + k * k; // while (x < currP) { // curr--; // currP = curr * curr; // nextP = (curr + 1) * (curr + 1); // } while (x >= nextP) { curr++; currP = curr * curr; nextP = (curr + 1) * (curr + 1); } if (x == currP) { if (i == j && j == k) { res += 1; } else if (i == j || j == k) { res += 2; } else { res += 3; } } } } } std::cout << res << std::endl; return 0; } |