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 C (GCC 9.2.1) (judge verdict: Accepted)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

int W_Length(char *str){
	int length = 0;
	while(*str++ != '\0')
		length++;
	return length;
}

void swap(int *a, int *b){
  int temp;
  temp=*a;
  *a=*b;
  *b=temp;
}
//swap(&a, &b)

double deg(double theta){//deg to theta
return theta*(2*3.14159265359)/360;
}

int cmp( const void *p, const void *q ) {
    return *(int*)p - *(int*)q;
}//ちいさい順
//qsort(a,n,sizeof(int),cmp);
//char s[n][11]

int cmp_s(const void * left, const void * right)
{
	char *left_char = (char *)left;
  char *right_char = (char *)right;
  return strcmp(left_char, right_char);
}
//qsort(s,n,sizeof(s[0]),cmp_s);


int main (void)
{
	int a,b,c,n,i,j,k,count,x=1,y=1,z=1,temp;

scanf("%d",&n);
  
  	for(i=1;i<=n;i++){
      count=0;
      x=1;
      y=1;
      z=1;
      //(x+y)*(x+y)+(y+z)*(y+z)+(z+x)*(z+x)<=2*i
  for(x=1;x*x<=2*i;x++){
    for(y=1;y<=x;y++){
      for(z=1;z<=y;z++){
        //printf("(x+y)*(x+y)+(y+z)*(y+z)+(z+x)*(z+x)=%d, 2*i=%d\n",(x+y)*(x+y)+(y+z)*(y+z)+(z+x)*(z+x),2*i);
        if((x+y)*(x+y)+(y+z)*(y+z)+(z+x)*(z+x)==2*i){
          if(z==y){
          if(y==x){
          count++;
          }
          else{
          count+=3;
          }
          }
            
            else if(y==x){
            count+=3;
            }
          
          else{
          
          count+=6;
          }
        }
    }
        
  }
  
  }
      
    printf("%d\n",count);
      
    }
  
return 0;
}