#include using namespace std; #define int long long int N, D; int XY[2*2000*2000+100]; // XY[i]: 左辺がiになる組み合わせの数 signed main() { cin >> N >> D; // 左辺 (x^2 + y^2) の組み合わせを数える for (int x = 1; x <= N; x++) { for (int y = 1; y <= N; y++) { int left = x*x + y*y; XY[left]++; } } int ans = 0; // 右辺 (w^2 - z^2 + D) の組み合わせを数える for (int w = 1; w <= N; w++) { for (int z = 1; z <= N; z++) { int right = w*w - z*z + D; // 左辺の値の範囲は 2 <= (x^2 + y^2) <= 2*N^2 if (2 <= right and right <= 2*N*N) { ans += XY[right]; } } } cout << ans << endl; return 0; }