// Using KMP and Z algorithm #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 #include #include #include #include #include using namespace std; using vi = vector; using vii = vector; using vs = vector; using vss = vector; using vb = vector; using vbb = vector; using ii = pair; using vpi = vector; using vpii = vector; using ll = long long; using vll = vector; using vvll = vector; using table = unordered_map; using pll = pair; using vpl = vector; using vpll = vector; #define f first #define s second #define forn(i, n) for(int i = 0; i < n; i++) #define fore(i, a, b) for(int i = a; i <= b; i++) #define for1n(i, n) for(int i = 1; i <= n; i++) #define rof(i, n) for(int i = n-1; i >= 0; i--) #define rofe(i, a, b) for(int i = b; i >= a; i--) #define all(x) x.begin(), x.end() #define dsc(type) greater #define Flag cout << "Reached here.\n" #define FASTIO ios::sync_with_stdio(0); cin.tie(0); #define pb push_back #define pbb pop_back #define sz size #define rsz resize #define rsv reserve #define ins insert #define lb(a, val) lower_bound(all(a), val); #define ub(a, val) upper_bound(all(a), val); #define onec(x) __builtin_popcount(x) #define end0(x) __builtin_clz(x) #define beg0(x) __builtin_ctz(x) #define MAX 1000000000ll #define MIN -MAX #define mod 1000000007LL #define clr(x, y) memset(x, y, sizeof(x)) template bool ckmin(T& a, const T& b) { return b < a ? a = b, 1 : 0; } template bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; } int dx[] = {0, 1, -1, 0}; int dy[] = {1, 0, 0, -1}; void init() { #ifndef ONLINE_JUDGE freopen("output.txt", "w", stdout); freopen("input.txt", "r", stdin); #endif } ll binpow(ll a, ll b) { a %= mod; ll res = 1; while (b > 0) { if (b & 1) res *= a, res %= mod; a *= a, a %= mod; b >>= 1; } return res; } vi fct(ll n) { vi fac; while(n%2 == 0) n /= 2, fac.pb(2); for(int i = 3; i * i <= n; i += 2) while(n%i == 0) fac.pb(i), n /= i; if(n > 1) fac.pb(n); return fac; } ll gcd(ll a, ll b) { if (b == 0) return a; return gcd(b, a % b); } ll lcm(ll a, ll b) { return (a*b) / gcd(a, b); } #define maxN using ld = long double; #define PI 3.14159265358979323846264338327950288 ld deg(ld rad) { return rad*180.000/PI; } ld radian(ld degree) { return degree*PI/(ld) 180.00; } // ll pos[10000000]; void solve() { ll n, d; cin >> n >> d; vi pos(2*(n*n) + 2); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { // if(i*i+j*j > (d+1)+(n*n)) continue; pos[i*i+j*j]++; } } // forn(i, min((int)pos.sz(), 100)) { // cout << pos[i] << ' '; // } // cout << '\n'; ll ans = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { ll s = i*i-j*j+d; //if(pos.find(s) != pos.end()) if(s < 0 || s >= pos.sz()) continue; ans += pos[s]; } } cout << ans << '\n'; } int main() { //Sublime // init(); // FASTIO; solve(); }