#include #include #define rep2(i, k, n) for (i64 i = (i64)(k); i < (i64)(n); i++) #define rep(i, n) rep2(i, 0, n) #define all(x) begin(x), end(x) #ifdef ENV_LOCAL #define dump \ if (1) cerr #else #define dump \ if (0) cerr #endif using namespace std; using namespace std::string_literals; using i32 = int32_t; using i64 = int64_t; using f64 = double; using f80 = long double; using vi32 = vector; using vi64 = vector; // using namespace harudake; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); i64 n; cin >> n; i64 ans = 0; rep2(p, 2, 10) { i64 mx = min(p, 10) - 1; rep(a, mx + 1) rep(b, mx + 1) { if (a == b) continue; if (p * p - n * a * p - n * b - 1 < 0) ++ans; } } rep(a, 10) rep(b, 10) { if (a == b) continue; i64 c1 = -n * a; i64 c0 = -n * b - 1; i64 D = c1 * c1 - 4 * c0; f64 rD = sqrt(D); i64 lo = floor((-c1 - rD) / 2.0) - 1; i64 hi = ceil((-c1 + rD) / 2.0) + 1; while (lo <= hi) { if (lo * lo + c1 * lo + c0 >= 0) { ++lo; continue; } if (hi * hi + c1 * hi + c0 >= 0) { --hi; continue; } break; } // dump << a << " " << b << " " << lo << " " << hi << endl; lo = max(lo, 10); ans += max(0, hi - lo + 1); } cout << ans << endl; return 0; }