//C++ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif #if __cplusplus >= 201402L #include #endif #if __cplusplus >= 201703L #include #include // #include #include #include //#include #include #include #endif #if __cplusplus > 201703L #include #include #include #include #if __cpp_impl_coroutine #include #endif #include #include #include #include #include #include #include #include #include #endif //C #ifndef _GLIBCXX_NO_ASSERT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #include #endif //#define int ll using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; using uint = unsigned int; using pii = pair; using pll = pair; using pdd = pair; #define rep1(i, n) for(ll i = 0; i < (int)(n); i++) #define rep2(i, a, b) for(ll i = (int)(a); i < (int)(b); i++) #define rep3(i, a, b, c) for(ll i = (int)(a); i < (int)(b); i+=(int)(c)) #define rrep1(i, n) for(ll i = (int)(n); i >= 0; i--) #define rrep2(i, a, b) for(ll i = (int)(b); i >= (int)(a); i--) #define REP(i) for(ll i = 0; ; i++) #define all(v) (v).begin(), (v).end() template using pq = priority_queue, greater>; template bool chmin(T &a, const T &b){ if(a > b){ a = b; return 1; } else return 0; } template bool chmax(T &a, const T &b){ if(a < b){ a = b; return 1; } else return 0; } template auto min(const T& a){ return *min_element(all(a)); } template auto max(const T& a){ return *max_element(all(a)); } template ll sum(const T& a){ return accumulate(all(a), 0LL); } template ld dsum(const T& a){ return accumulate(all(a), 0.0L); } const int MOD = 1000000007; const int MMOD = 998244353; const int MAX = 510000; const double PI = 3.14159265358979323846; const ll INF = 1LL<<60; ll gcd(ll a, ll b){ while(b){ ll c = b; b = a % b; a = c; } return a; } ll lcm(ll a, ll b){ if(!a || !b) return 0; return a * b / gcd(a, b); } ll POW(ll a, ll b){ ll ans = 1; while(b){ if(b & 1) ans *= a; a *= a; b /= 2; } return ans; } ll MODPOW(ll a, ll b){ ll ret = 1; while(b){ if(b & 1) ret = ret*a%MOD; a = a*a%MOD; b /= 2;} return ret;} /* #include #include namespace mp = boost::multiprecision; // 任意長整数型 using Bint = mp::cpp_int; //*/ /* struct Edge{ ll to; ll we; t(ll s, ll t) : to(s), we(t) {} }; using Graph = vector>; //*/ /* #include using namespace atcoder; //*/ /* ll op(ll a, ll b) { return a+b; } ll e() { return 0; } //*/ signed main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); ll N; cin >> N; N *= N; ll ans = 0; for(ll i = 1; i <= 1000000; i++){ if(i*i >= N) break; ll p = N-i*i; ll q = (ll)floor(sqrt((ld)p)); ans += (q*q==p?1:0); } cout << ans << endl; }