#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 #pragma GCC diagnostic ignored "-Wsign-compare" #pragma GCC diagnostic ignored "-Wsign-conversion" using ld = long double; using ll = long long; //!============================================!// //! 8888ba.88ba oo !// //! 88 '8b '8b !// //! 88 88 88 .d8888b. dP 88d888b. !// //! 88 88 88 88' '88 88 88' '88 !// //! 88 88 88 88. .88 88 88 88 !// //! dP dP dP '88888P8 dP dP dP !// //!============================================!// int main() { int N, D; std::cin >> N >> D; std::unordered_map wa, sa; for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { wa[i * i + j * j]++, sa[i * i - j * j]++; } } ll ans = 0; for (const auto& p : sa) { const int W = D + p.first; if (wa.find(W) != wa.end()) { ans += p.second * wa[W]; } } std::cout << ans << std::endl; return 0; }