//Maqsad Nahi Bhoolna #include #include #include using namespace std; using namespace __gnu_pbds; template using min_heap = priority_queue, greater>; template using max_heap = priority_queue; template using ordered_set = tree, rb_tree_tag, tree_order_statistics_node_update>; //find_by_order(k): returns iterator to k-th smallest element (0-based) //order_of_key(x): returns number of elements strictly less than x #define ll long long int #define ld long double #define nl cout<<"\n" #define re return 0 #define fs first #define sc second #define MOD 1000000007 #define pii pair #define vl vector #define vll vector> #define vpii vector> #define vvpii vector>> #define vb vector #define vbb vector> #define vc vector #define vcc vector> #define vs vector #define vss vector> #define all(vec) vec.begin(), vec.end() #define allr(vec) vec.rbegin(), vec.rend() #define sahi(vec) sort(vec.begin(),vec.end()) #define ulta(vec) sort(vec.begin(),vec.end(),greater()) #define fori(a,b) for(ll i=a;i=b;r--) #define yes(expr) (expr)? cout<<"yes" : cout<<"no" #define Yes(expr) (expr)? cout<<"Yes" : cout<<"No" #define YES(expr) (expr)? cout<<"YES" : cout<<"NO" #define print(vec) for(auto x : vec) cout< istream& operator>>(istream &in, pair &p) { in >> p.first >> p.second; return in; } template istream& operator>>(istream &in, vector &v) { for (auto &x : v) in >> x; return in; } template ostream& operator<<(ostream &out, const pair &p) { out << p.first << " " << p.second; return out; } template ostream& operator<<(ostream &out, const vector &v) { for (auto &x : v) out << x << " "; return out; } int main() { io; ll t = 1; // cin>>t; while(t--) { ll n, m; cin >> n >> m; vl ans(n+1,0); fori(0,m+1) { if(i*i > n) break; forj(0,m+1) { if(i*i + i*j + j*j > n) break; fork(0,m+1) { if(i*i + i*j + i*k + j*j + j*k + k*k > n) break; for(ll l = 0; l <= m; l++) { ll x = i*(i+j+k+l) + j*(j+k+l) + k*(k+l) + l*l; if(x > n) break; if(x <= n) ans[x]++; } } } } fori(0,n+1) { cout << ans[i]; nl; } } return 0; }