#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, int);
int /*<<< orphan*/ scanf(char *, int *);
int main() {
  int N, d = 0;
  float a = 1, b = 1, c = 1, x, y, z;
  scanf("%d", &N);
  for (a = 1; a <= N; a++) {
    for (b = 1; b <= a; b++) {
      for (c = 1; c <= b; c++) {
        x = ((a * a) + (b * b) - (c * c)) / (2 * a * b);
        y = ((a * a) + (c * c) - (b * b)) / (2 * a * c);
        z = ((b * b) + (c * c) - (a * a)) / (2 * b * c);
        if (x < 1 && x > -1 && y < 1 && y > -1 && z < 1 && z > -1 && a >= b &&
            b >= c && a >= c)
          d = d + 1;
      }
    }
  }
  printf("Number of possible triangles is %d", d);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0xc(%rbp)
movss  0xec2(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xeb5(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xea8(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
lea    0xec8(%rip),%rdi
lea    -0x8(%rbp),%rsi
call   1040 <scanf@plt>
movss  0xe8b(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x10(%rbp),%xmm1
cvtsi2ssl -0x8(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     13d1 <main+0x2b1>
movss  0xe6b(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     13b5 <main+0x295>
movss  0xe4b(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm1
movss  -0x14(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1399 <main+0x279>
movss  -0x10(%rbp),%xmm1
movss  -0x10(%rbp),%xmm2
movss  -0x14(%rbp),%xmm0
mulss  -0x14(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x18(%rbp),%xmm0
movss  -0x18(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  0xdf4(%rip),%xmm1
mulss  -0x10(%rbp),%xmm1
mulss  -0x14(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x10(%rbp),%xmm1
movss  -0x10(%rbp),%xmm2
movss  -0x18(%rbp),%xmm0
mulss  -0x18(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x14(%rbp),%xmm0
movss  -0x14(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  0xd9e(%rip),%xmm1
mulss  -0x10(%rbp),%xmm1
mulss  -0x18(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x14(%rbp),%xmm1
movss  -0x14(%rbp),%xmm2
movss  -0x18(%rbp),%xmm0
mulss  -0x18(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x10(%rbp),%xmm0
movss  -0x10(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  0xd48(%rip),%xmm1
mulss  -0x14(%rbp),%xmm1
mulss  -0x18(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xd29(%rip),%xmm0
ucomiss -0x1c(%rbp),%xmm0
jbe    137d <main+0x25d>
movss  -0x1c(%rbp),%xmm0
movss  0xd1a(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    137d <main+0x25d>
movss  0xd01(%rip),%xmm0
ucomiss -0x20(%rbp),%xmm0
jbe    137d <main+0x25d>
movss  -0x20(%rbp),%xmm0
movss  0xcf2(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    137d <main+0x25d>
movss  0xcd9(%rip),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    137d <main+0x25d>
movss  -0x24(%rbp),%xmm0
movss  0xcca(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    137d <main+0x25d>
movss  -0x10(%rbp),%xmm0
ucomiss -0x14(%rbp),%xmm0
jb     137d <main+0x25d>
movss  -0x14(%rbp),%xmm0
ucomiss -0x18(%rbp),%xmm0
jb     137d <main+0x25d>
movss  -0x10(%rbp),%xmm0
ucomiss -0x18(%rbp),%xmm0
jb     137d <main+0x25d>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1382 <main+0x262>
movss  0xc76(%rip),%xmm0
addss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    11ba <main+0x9a>
jmp    139e <main+0x27e>
movss  0xc5a(%rip),%xmm0
addss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    119a <main+0x7a>
jmp    13ba <main+0x29a>
movss  0xc3e(%rip),%xmm0
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    117a <main+0x5a>
mov    -0xc(%rbp),%esi
lea    0xc31(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x58,%rsp
lea    0xf25(%rip),%rdi
lea    0xc(%rsp),%rsi
call   1040 <scanf@plt>
mov    0xc(%rsp),%eax
test   %eax,%eax
jle    1307 <main+0x1e7>
cvtsi2ss %eax,%xmm0
movss  %xmm0,0x8(%rsp)
movss  0xeac(%rip),%xmm12
xor    %esi,%esi
movaps 0xeb2(%rip),%xmm14
movss  0xe9e(%rip),%xmm3
movaps 0xeb3(%rip),%xmm5
movaps %xmm12,%xmm10
jmp    1195 <main+0x75>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addss  %xmm12,%xmm10
movss  0x8(%rsp),%xmm0
ucomiss %xmm10,%xmm0
jb     1309 <main+0x1e9>
ucomiss %xmm12,%xmm10
jb     1180 <main+0x60>
movaps %xmm10,%xmm6
addss  %xmm10,%xmm6
movaps %xmm10,%xmm7
xorps  %xmm14,%xmm7
movaps %xmm12,%xmm15
jmp    11cb <main+0xab>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addss  %xmm12,%xmm15
ucomiss %xmm15,%xmm10
jb     1180 <main+0x60>
ucomiss %xmm12,%xmm15
jb     11c0 <main+0xa0>
movaps %xmm15,%xmm8
mulss  %xmm15,%xmm8
movaps %xmm10,%xmm0
mulss  %xmm10,%xmm0
movaps %xmm0,0x30(%rsp)
movaps %xmm8,0x40(%rsp)
addss  %xmm8,%xmm0
movaps %xmm6,%xmm8
mulss  %xmm15,%xmm8
movaps %xmm15,%xmm13
xorps  %xmm14,%xmm13
movaps %xmm15,%xmm1
addss  %xmm15,%xmm1
movaps %xmm1,0x10(%rsp)
movaps %xmm8,%xmm1
shufps $0x0,%xmm0,%xmm0
movaps %xmm0,0x20(%rsp)
shufps $0x0,%xmm8,%xmm1
movaps %xmm12,%xmm9
nopl   0x0(%rax,%rax,1)
movaps %xmm9,%xmm11
xorps  %xmm14,%xmm11
movaps %xmm9,%xmm8
mulss  %xmm9,%xmm8
movaps 0x30(%rsp),%xmm4
addss  %xmm8,%xmm4
movaps 0x20(%rsp),%xmm2
movss  %xmm4,%xmm2
movlhps %xmm13,%xmm11
shufps $0xe2,%xmm13,%xmm11
movaps %xmm9,%xmm4
movlhps %xmm15,%xmm4
shufps $0xe2,%xmm15,%xmm4
mulps  %xmm11,%xmm4
addps  %xmm2,%xmm4
movaps %xmm6,%xmm2
mulss  %xmm9,%xmm2
movaps %xmm6,%xmm0
movaps %xmm1,%xmm6
movss  %xmm2,%xmm6
divps  %xmm6,%xmm4
addss  0x40(%rsp),%xmm8
movaps %xmm7,%xmm2
mulss  %xmm10,%xmm2
addss  %xmm8,%xmm2
movaps 0x10(%rsp),%xmm6
mulss  %xmm9,%xmm6
divss  %xmm6,%xmm2
movaps %xmm4,%xmm6
shufps $0x55,%xmm4,%xmm6
ucomiss %xmm3,%xmm6
movaps %xmm4,%xmm6
cmpltps %xmm5,%xmm6
unpcklps %xmm6,%xmm6
movmskpd %xmm6,%eax
movaps %xmm0,%xmm6
seta   %cl
and    %al,%cl
shr    %al
and    %cl,%al
ucomiss %xmm3,%xmm4
seta   %cl
ucomiss %xmm2,%xmm12
seta   %dl
and    %cl,%dl
ucomiss %xmm3,%xmm2
seta   %cl
and    %dl,%cl
ucomiss %xmm9,%xmm10
setae  %dl
and    %cl,%dl
and    %al,%dl
movzbl %dl,%eax
add    %eax,%esi
addss  %xmm12,%xmm9
ucomiss %xmm9,%xmm15
jae    1230 <main+0x110>
jmp    11c0 <main+0xa0>
xor    %esi,%esi
lea    0xd20(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x58,%rsp
ret

LLVM IR (-O0):
@.str = [3 x i8] c"%d\00"
@.str.1 = [35 x i8] c"Number of possible triangles is %d\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
store i32 0, i32* %1
store i32 0, i32* %3
store float 1.000000e+00, float* %4
store float 1.000000e+00, float* %5
store float 1.000000e+00, float* %6
%10 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %2)
store float 1.000000e+00, float* %4
br label %11
11: ; preds = %113, %0
%12 = load float, float* %4
%13 = load i32, i32* %2
%14 = sitofp i32 %13 to float
%15 = fcmp ole float %12, %14
br i1 %15, label %16, label %116
16: ; preds = %11
store float 1.000000e+00, float* %5
br label %17
17: ; preds = %109, %16
%18 = load float, float* %5
%19 = load float, float* %4
%20 = fcmp ole float %18, %19
br i1 %20, label %21, label %112
21: ; preds = %17
store float 1.000000e+00, float* %6
br label %22
22: ; preds = %105, %21
%23 = load float, float* %6
%24 = load float, float* %5
%25 = fcmp ole float %23, %24
br i1 %25, label %26, label %108
26: ; preds = %22
%27 = load float, float* %4
%28 = load float, float* %4
%29 = load float, float* %5
%30 = load float, float* %5
%31 = fmul float %29, %30
%32 = call float @llvm.fmuladd.f32(float %27, float %28, float %31)
%33 = load float, float* %6
%34 = load float, float* %6
%35 = fneg float %33
%36 = call float @llvm.fmuladd.f32(float %35, float %34, float %32)
%37 = load float, float* %4
%38 = fmul float 2.000000e+00, %37
%39 = load float, float* %5
%40 = fmul float %38, %39
%41 = fdiv float %36, %40
store float %41, float* %7
%42 = load float, float* %4
%43 = load float, float* %4
%44 = load float, float* %6
%45 = load float, float* %6
%46 = fmul float %44, %45
%47 = call float @llvm.fmuladd.f32(float %42, float %43, float %46)
%48 = load float, float* %5
%49 = load float, float* %5
%50 = fneg float %48
%51 = call float @llvm.fmuladd.f32(float %50, float %49, float %47)
%52 = load float, float* %4
%53 = fmul float 2.000000e+00, %52
%54 = load float, float* %6
%55 = fmul float %53, %54
%56 = fdiv float %51, %55
store float %56, float* %8
%57 = load float, float* %5
%58 = load float, float* %5
%59 = load float, float* %6
%60 = load float, float* %6
%61 = fmul float %59, %60
%62 = call float @llvm.fmuladd.f32(float %57, float %58, float %61)
%63 = load float, float* %4
%64 = load float, float* %4
%65 = fneg float %63
%66 = call float @llvm.fmuladd.f32(float %65, float %64, float %62)
%67 = load float, float* %5
%68 = fmul float 2.000000e+00, %67
%69 = load float, float* %6
%70 = fmul float %68, %69
%71 = fdiv float %66, %70
store float %71, float* %9
%72 = load float, float* %7
%73 = fcmp olt float %72, 1.000000e+00
br i1 %73, label %74, label %104
74: ; preds = %26
%75 = load float, float* %7
%76 = fcmp ogt float %75, -1.000000e+00
br i1 %76, label %77, label %104
77: ; preds = %74
%78 = load float, float* %8
%79 = fcmp olt float %78, 1.000000e+00
br i1 %79, label %80, label %104
80: ; preds = %77
%81 = load float, float* %8
%82 = fcmp ogt float %81, -1.000000e+00
br i1 %82, label %83, label %104
83: ; preds = %80
%84 = load float, float* %9
%85 = fcmp olt float %84, 1.000000e+00
br i1 %85, label %86, label %104
86: ; preds = %83
%87 = load float, float* %9
%88 = fcmp ogt float %87, -1.000000e+00
br i1 %88, label %89, label %104
89: ; preds = %86
%90 = load float, float* %4
%91 = load float, float* %5
%92 = fcmp oge float %90, %91
br i1 %92, label %93, label %104
93: ; preds = %89
%94 = load float, float* %5
%95 = load float, float* %6
%96 = fcmp oge float %94, %95
br i1 %96, label %97, label %104
97: ; preds = %93
%98 = load float, float* %4
%99 = load float, float* %6
%100 = fcmp oge float %98, %99
br i1 %100, label %101, label %104
101: ; preds = %97
%102 = load i32, i32* %3
%103 = add nsw i32 %102, 1
store i32 %103, i32* %3
br label %104
104: ; preds = %101, %97, %93, %89, %86, %83, %80, %77, %74, %26
br label %105
105: ; preds = %104
%106 = load float, float* %6
%107 = fadd float %106, 1.000000e+00
store float %107, float* %6
br label %22
108: ; preds = %22
br label %109
109: ; preds = %108
%110 = load float, float* %5
%111 = fadd float %110, 1.000000e+00
store float %111, float* %5
br label %17
112: ; preds = %17
br label %113
113: ; preds = %112
%114 = load float, float* %4
%115 = fadd float %114, 1.000000e+00
store float %115, float* %4
br label %11
116: ; preds = %11
%117 = load i32, i32* %3
%118 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i32 %117)
ret i32 0
}

LLVM IR (-O2):
@.str = [3 x i8] c"%d\00"
@.str.1 = [35 x i8] c"Number of possible triangles is %d\00"
define i32 @main() {
%1 = alloca i32
%2 = bitcast i32* %1 to i8*
%3 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %1)
%4 = load i32, i32* %1
%5 = sitofp i32 %4 to float
%6 = icmp slt i32 %4, 1
br i1 %6, label %73, label %7
7: ; preds = %0, %69
%8 = phi i32 [ %70, %69 ], [ 0, %0 ]
%9 = phi float [ %71, %69 ], [ 1.000000e+00, %0 ]
%10 = fcmp ult float %9, 1.000000e+00
br i1 %10, label %69, label %11
11: ; preds = %7
%12 = fmul float %9, 2.000000e+00
%13 = fneg float %9
br label %14
14: ; preds = %11, %65
%15 = phi i32 [ %8, %11 ], [ %66, %65 ]
%16 = phi float [ 1.000000e+00, %11 ], [ %67, %65 ]
%17 = fcmp ult float %16, 1.000000e+00
br i1 %17, label %65, label %18
18: ; preds = %14
%19 = fmul float %16, %16
%20 = call float @llvm.fmuladd.f32(float %9, float %9, float %19)
%21 = fmul float %12, %16
%22 = fneg float %16
%23 = fmul float %16, 2.000000e+00
%24 = insertelement <2 x float> poison, float %22, i64 0
%25 = insertelement <2 x float> poison, float %16, i64 0
%26 = insertelement <2 x float> poison, float %20, i64 1
%27 = insertelement <2 x float> poison, float %21, i64 1
br label %28
28: ; preds = %18, %28
%29 = phi i32 [ %15, %18 ], [ %62, %28 ]
%30 = phi float [ 1.000000e+00, %18 ], [ %63, %28 ]
%31 = fneg float %30
%32 = fmul float %30, %30
%33 = call float @llvm.fmuladd.f32(float %9, float %9, float %32)
%34 = insertelement <2 x float> %24, float %31, i64 1
%35 = insertelement <2 x float> %25, float %30, i64 1
%36 = insertelement <2 x float> %26, float %33, i64 0
%37 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %34, <2 x float> %35, <2 x float> %36)
%38 = fmul float %12, %30
%39 = insertelement <2 x float> %27, float %38, i64 0
%40 = fdiv <2 x float> %37, %39
%41 = call float @llvm.fmuladd.f32(float %16, float %16, float %32)
%42 = call float @llvm.fmuladd.f32(float %13, float %9, float %41)
%43 = fmul float %23, %30
%44 = fdiv float %42, %43
%45 = extractelement <2 x float> %40, i64 1
%46 = fcmp ogt float %45, -1.000000e+00
%47 = fcmp olt <2 x float> %40, <float 1.000000e+00, float 1.000000e+00>
%48 = extractelement <2 x i1> %47, i64 1
%49 = and i1 %48, %46
%50 = extractelement <2 x i1> %47, i64 0
%51 = select i1 %49, i1 %50, i1 false
%52 = extractelement <2 x float> %40, i64 0
%53 = fcmp ogt float %52, -1.000000e+00
%54 = select i1 %51, i1 %53, i1 false
%55 = fcmp olt float %44, 1.000000e+00
%56 = select i1 %54, i1 %55, i1 false
%57 = fcmp ogt float %44, -1.000000e+00
%58 = select i1 %56, i1 %57, i1 false
%59 = fcmp oge float %9, %30
%60 = select i1 %58, i1 %59, i1 false
%61 = zext i1 %60 to i32
%62 = add nsw i32 %29, %61
%63 = fadd float %30, 1.000000e+00
%64 = fcmp ugt float %63, %16
br i1 %64, label %65, label %28
65: ; preds = %28, %14
%66 = phi i32 [ %15, %14 ], [ %62, %28 ]
%67 = fadd float %16, 1.000000e+00
%68 = fcmp ugt float %67, %9
br i1 %68, label %69, label %14
69: ; preds = %65, %7
%70 = phi i32 [ %8, %7 ], [ %66, %65 ]
%71 = fadd float %9, 1.000000e+00
%72 = fcmp ugt float %71, %5
br i1 %72, label %73, label %7
73: ; preds = %69, %0
%74 = phi i32 [ 0, %0 ], [ %70, %69 ]
%75 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i32 %74)
ret i32 0
}