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 PyPy3 (7.3.0) (judge verdict: Wrong Answer)

import math
n = int(input())

def judge(n, x=1, y=1, z=1, l=[]):
    n_odd = n % 2 == 0
    num = 0
    x_th = math.ceil(math.sqrt(n) / 3) + 1
    #print('x_th: ', x_th+1)
    for x_i in range(1, x_th+1):
        #print('x_i: ', x_i)
        for y_i in range(x_i, x_th+1):
            y_th = n - x_i**2 + y_i**2 + x_i*y_i
            #print('y_i: ', y_i)
            #print('y_th: ', y_th)
            if y_th < 0:
                break
            for z_i in range(y_i, x_th+1):
                x_odd = x_i % 2 == 0
                y_odd = y_i % 2 == 0
                z_odd = z_i % 2 == 0
                num_odd = x_odd + y_odd + z_odd
                if n_odd and (num_odd == 1 or num_odd == 2):
                    continue
                #print('z_i: ', z_i)
                result = x_i**2 + y_i**2 + z_i**2 + x_i*y_i + y_i*z_i + z_i*x_i
                #print('result: ', result)
                if result > n:
                    break
                elif result == n:
                    if x_i != y_i != z_i:
                        num += 6
                        break
                    elif x_i == y_i != z_i or x_i != y_i == z_i:
                        num += 3
                        break
                    elif x_i == y_i == z_i:
                        num += 1
                        break
                    #print('num: ', num)
    return num

#fn = judge(18, l=[])
#print(fn)
for i in range(1, n+1):
    fn = judge(i, l=[])
    print(fn)