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.



Sample input:
20


Sample output:
0
0
0
0
0
1
0
0
0
0
3
0
0
0
0
0
3
3
0
0

Submission status: Runtime Error

Solution code:
import math as m
import time
N=int(input())
ans=[0]*N
for x in range(1,int(m.sqrt(N-5))+1):
    for y in range(1,x+1):
        if x**2+y**2+x*y+x+y+1>N:
            break
        for z in range(1,y+1):
            if x**2+y**2+x*y+x*z+y*z+z**2>N:
                break
            if len(list(set([x,y,z])))==3:
                ans[x**2+y**2+x*y+x*z+y*z+z**2-1]+=6
            elif len(list(set([x,y,z])))==2:
                ans[x**2+y**2+x*y+x*z+y*z+z**2-1]+=3
            elif len(list(set([x,y,z])))==1:
                ans[x**2+y**2+x*y+x*z+y*z+z**2-1]+=1

for a in ans:
    print(a)

Submission status: Runtime Error

Solution code:
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
    for x_i in range(1, x_th+1):
        for y_i in range(x_i, x_th+1):
            y_th = n - x_i**2 + y_i**2 + x_i*y_i
            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):x_odd 
                    continue
                result = x_i**2 + y_i**2 + z_i**2 + x_i*y_i + y_i*z_i + z_i*x_i
                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
    return num

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

Submission status: Runtime Error

Solution code:
N = int(input())
l = [0] * N


x = 1
y = 1
z = 1

ans = 6
first_judge = 1
ans_out = 0
#print("ans 6")

if N <= 5:
    for i in range(N):
        print(l[i])
else:
    while ans <= N:
        print("x,y,z=",x,y,z)
        ans = (x + y + z)**2 - (x*y+ y*z + z*x)
        # print("ans",ans)
        if first_judge == 1 and ans > N:
            if ans_out >= 2:
                # print("break!")
                break
            else:
                x += 1
                y = x
                z = x
                ans_out += 1
                first_judge = 1
                ans = 0
                # print("x_++ x,y,z=",x,y,z)
                # print("first_judge=1")
                # print("ans_out=",ans_out)
        elif ans <= N:
            ans_out = 0
            if x==y==z:
                # print("x=y=z!")
                # print("first_judge=0")
                l[ans-1] += 1
                first_judge = 0
            elif x==y or y==z or Z==x:
                # print("list in")
                # print("first_judge=0")
                l[ans-1] += 3
                first_judge = 0
            else:
                l[ans-1] += 6
                first_judge = 0
            z += 1
        else:
            y += 1
            z = y
            first_judge = 1
            ans_out += 1
            ans = 0
            # print("kousin x,y,z=",x,y,z)
            # print("first_judge=1")
            # print("ans_out=",ans_out)
            
        # print("\n")
        
    for i in range(N):
        print(l[i])