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: Accepted

Solution code:
import math
n = int(input())
ls = [0 for i in range(n)]
r = math.ceil(math.sqrt(n))

for x in range(1, r + 1):
    for y in range(1, r + 1):
        for z in range(1, r + 1):
            k = x ** 2 + y ** 2 + z ** 2 + x * y + y * z + z * x
            if k <= n:
                ls[k - 1] += 1

for i in range(n):
    print(ls[i])

Submission status: Accepted

Solution code:
# -*- coding: utf-8 -*-
import math

N = int(input())
f = [0] * N
for i in range(1, N+1):
  count = 0
  for x in range(1, i):
    if x**2 > N:
      break
    for y in range(x, i):
      if y**2 > N:
        break
      z = i-x-y
      if z < y:
        break
      n = x**2 + y**2 + z**2 + x*y + y*z + z*x
      if z > math.sqrt(n + 1):
        break
      if n <= N:
        if x == y and x == z:
          f[n-1] += 1
        elif x == y or y == z:
          f[n-1] += 3
        elif x != y and x != z and y != z:
          f[n-1] += 6
for i in f:
  print(i)

Submission status: Accepted

Solution code:
import collections
n=int(input())
cnt=[]
for x in range(1,101):
  for y in range(1,101):
    for z in range(1,101):
      a=x**2+y**2+z**2+x*y+y*z+z*x
      if a<=n:
        cnt.append(a)
c=collections.Counter(cnt)
for i in range(1,n+1):
  print(c[i])

Submission status: Accepted

Solution code:
def main():
  n = int(input())
  ans = [0 for _ in range(10050)]
  for i in range(1, 105):
    for j in range(1, 105):
      for k in range(1, 105):
        v = i * i + j * j + k * k + i * j + j * k + k * i
        if v < 10050:
          ans[v] += 1
  
  for i in range(n):
    print(ans[i + 1])


if __name__ == '__main__':
  main()

Submission status: Accepted

Solution code:
n = int(input())
a = [0]*(n+1)
for i in range(1, 102):
    for j in range(1, 102):
        for k in range(1, 102):
            if (i*i + j*j + k*k + i*j + j*k + i*k) <= n:
                a[i*i + j*j + k*k + i*j + j*k + i*k] +=1
                
for x in a[1:]:
    print(x)

Submission status: Accepted

Solution code:
from itertools import product
N=int(input())
f=[0]*N
for x,y,z in product(range(1,100),repeat=3):
    n=x**2+y**2+z**2+x*y+y*z+z*x
    if n<=N:
        f[n-1]+=1
for i in range(N):
    print(f[i])

Submission status: Accepted

Solution code:
n = int(input())
ans = [0] * (n + 1)
loop = int(n ** .5) + 1

def f(i, j, k):
    return i ** 2 + j ** 2 + k ** 2 + i*j + j*k + k*i

for i in range(1, loop+1):
    for j in range(1, loop+1):
        for k in range(1, loop+1):
            res = int(f(i, j, k))
            if res <= n:
                ans[res] += 1

for a in ans[1:]:
    print(a)

Submission status: Accepted

Solution code:
n = int(input())
cnt = [0 for i in range(10001)]

for x in range(1, 101):
  for y in range(1, 101):
    for z in range(1, 101):
      ans = x * x + y * y + z * z + x * y + y * z + z * x
      if ans <= 10000:
        cnt[ans] += 1

for i in range(1, n + 1):
  print(cnt[i])