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

/* 一辺の長さの最大値 */
#define MAX_NUM 100

/* 関数のプロトタイプ宣言 */
int is_eisenstein(int, int, int);
int prime3(int, int, int);
int gcd(int, int);

int main(){
  int a,b,c;

  /* a<=b<=c を仮定して，総当り */
  /* 三角形の成立条件 a+b>c に注意する */
  for(c=1; c<MAX_NUM; c++){
    for(b=1; b<=c; b++){
      for(a=c-b+1; a<=b; a++){
        /* (a,b,c)がアイゼンシュタイン三角形かどうか確認 */
        if(is_eisenstein(a,b,c) && prime3(a,b,c)){ // a,b,cが互いに素
          printf("(%d, %d, %d)\n", a,b,c);
        }
      }
    }
  }
  return 0;
}

/* (a,b,c)がアイゼンシュタイン三角形かどうかを返す関数 */
/* アイゼンシュタイン三角形なら1，そうでないなら0を返す */
int is_eisenstein(int a, int b, int c){
  if(a*a + a*b + b*b == c*c) return 1;
  else return 0;
}

int prime3(int a, int b, int c){
   int i;
   i = gcd(a,b);
   if (i==1) return 1;
   if (c%i == 0) return 0;
   return 1;
}

// 最大公約数を求める関数
int gcd(int x, int y)
{
    int r;

    // ユーグリッドの互除法
    while((r = x % y) != 0)  // yで割り切れるまでループ
    {
        x = y;
        y = r;
    }
    return y;
}
