Problem:
Score : 300 points

Problem Statement

Let f(n) be the number of triples of integers (x,y,z) that satisfy both of the following conditions:

1 \leq x,y,z

x^2 + y^2 + z^2 + xy + yz + zx = n

Given an integer N, find each of f(1),f(2),f(3),\ldots,f(N).

Constraints

All values in input are integers.

1 \leq N \leq 10^4

Input

Input is given from Standard Input in the following format:

N

Output

Print N lines. The i-th line should contain the value f(i).

Sample Input 1

20

Sample Output 1

0
0
0
0
0
1
0
0
0
0
3
0
0
0
0
0
3
3
0
0

For n=6, only (1,1,1) satisfies both of the conditions. Thus, f(6) = 1.

For n=11, three triples, (1,1,2), (1,2,1), and (2,1,1), satisfy both of the conditions. Thus, f(6) = 3.

For n=17, three triples, (1,2,2), (2,1,2), and (2,2,1), satisfy both of the conditions. Thus, f(17) = 3.

For n=18, three triples, (1,1,3), (1,3,1), and (3,1,1), satisfy both of the conditions. Thus, f(18) = 3.

Solution in Ruby (2.7.1) (judge verdict: Wrong Answer)

# frozen_string_literal: true

DEBUG = false

def return_number(_x, _y, _z, _count)
  return 0 if _count == 0

  if _x == _z
    1
  elsif ((_x == _y) && (_y != _z)) || ((_y == _z) && (_x != _y))
    3
  else
    6
  end
end

def calc(x, y, z)
  x * x + y * y + z * z + x * y + x * z + y * z
end

# 条件を満たす個数を返す
def refrain(_n)
  miss_count = 0
  count = 0
  x = 1
  y = 1
  z = 1
  loop do
    result = 0
    y = x
    loop do
      z = y
      loop do
        result = calc(x, y, z)
        puts "DEBUG x,y,z,=#{x},#{y},#{z},n,result=#{_n},#{result}" if DEBUG
        if result == _n
          count += 1
          return return_number(x, y, z, count)
        elsif result > _n
          miss_count += 1
          break
        end
        z += 1
      end
      pp 'mc:', miss_count if DEBUG
      break if miss_count > 1

      y += 1
    end
    break if miss_count > 2

    x += 1
  end
  return_number(x, y, z, count)
end

INPUT_LINE = gets.chomp!.to_i
pp INPUT_LINE if DEBUG
# 0から入力数まで繰り返す
INPUT_LINE.times do |n|
  result = refrain(n + 1)
  puts result if result != -1
end
# calcを呼び出す
# 個数を出力

puts refrain(17) if DEBUG