#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 sqrt(int);
int nod(int n) {
  int num1 = 0, num2 = 0, i, root;
  if (n % 2 == 0) {
    root = sqrt(n + 1);
    for (i = 1; i < root; i++) {
      if (n + 1 % i == 0) {
        num1 += 2;
      }
    }
    if (n + 1 % root == 0) {
      num1 += 1;
    }
    root = sqrt(n / 2);
    for (i = 1; i < root; i++) {
      if (n / 2 % i == 0) {
        num2 += 2;
      }
    }
    if (n / 2 % root == 0) {
      num2 += 1;
    }
  } else {
    root = sqrt((n + 1) / 2);
    for (i = 1; i < root; i++) {
      if ((n + 1) / 2 % i == 0) {
        num1 += 2;
      }
    }
    if ((n + 1) / 2 % root == 0) {
      num1 += 1;
    }
    root = sqrt(n);
    for (i = 1; i < root; i++) {
      if (n % i == 0) {
        num2 += 2;
      }
    }
    if (n % root == 0) {
      num2 += 1;
    }
  }
  return num1 * num2;
}


x86 assembly (clang, -O0):
<nod>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    123f <nod+0x12f>
mov    -0x4(%rbp),%edi
add    $0x1,%edi
call   1030 <sqrt@plt>
mov    %eax,-0x14(%rbp)
movl   $0x1,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1197 <nod+0x87>
mov    -0x4(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    $0x1,%eax
cltd
idivl  -0x10(%rbp)
mov    -0x18(%rbp),%eax
add    %edx,%eax
cmp    $0x0,%eax
jne    1184 <nod+0x74>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    1189 <nod+0x79>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1152 <nod+0x42>
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    $0x1,%eax
cltd
idivl  -0x14(%rbp)
mov    -0x1c(%rbp),%eax
add    %edx,%eax
cmp    $0x0,%eax
jne    11bd <nod+0xad>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <sqrt@plt>
mov    %eax,-0x14(%rbp)
movl   $0x1,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1219 <nod+0x109>
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cltd
idivl  -0x10(%rbp)
cmp    $0x0,%edx
jne    1206 <nod+0xf6>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    120b <nod+0xfb>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    11d9 <nod+0xc9>
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cltd
idivl  -0x14(%rbp)
cmp    $0x0,%edx
jne    123a <nod+0x12a>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    132d <nod+0x21d>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <sqrt@plt>
mov    %eax,-0x14(%rbp)
movl   $0x1,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12a1 <nod+0x191>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cltd
idivl  -0x10(%rbp)
cmp    $0x0,%edx
jne    128e <nod+0x17e>
mov    -0x8(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8(%rbp)
jmp    1293 <nod+0x183>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    125e <nod+0x14e>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cltd
idivl  -0x14(%rbp)
cmp    $0x0,%edx
jne    12c5 <nod+0x1b5>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edi
call   1030 <sqrt@plt>
mov    %eax,-0x14(%rbp)
movl   $0x1,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    130f <nod+0x1ff>
mov    -0x4(%rbp),%eax
cltd
idivl  -0x10(%rbp)
cmp    $0x0,%edx
jne    12fc <nod+0x1ec>
mov    -0xc(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0xc(%rbp)
jmp    1301 <nod+0x1f1>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    12d7 <nod+0x1c7>
mov    -0x4(%rbp),%eax
cltd
idivl  -0x14(%rbp)
cmp    $0x0,%edx
jne    1328 <nod+0x218>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    132d <nod+0x21d>
mov    -0x8(%rbp),%eax
imul   -0xc(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nod>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %edi,%r14d
lea    0x1(%r14),%edi
test   $0x1,%r14b
jne    1166 <nod+0x56>
call   1030 <sqrt@plt>
mov    %eax,%r8d
mov    %r14d,%esi
neg    %esi
xor    %r13d,%r13d
mov    $0x0,%ebp
cmp    $0x2,%eax
jl     1228 <nod+0x118>
lea    -0x1(%r8),%eax
mov    %r8d,%edx
add    $0xfffffffe,%edx
mov    %eax,%ebx
and    $0x3,%ebx
cmp    $0x3,%edx
jae    11a9 <nod+0x99>
xor    %edx,%edx
mov    $0x1,%edi
jmp    11fb <nod+0xeb>
mov    %edi,%r15d
shr    $0x1f,%r15d
add    %edi,%r15d
sar    %r15d
mov    %r15d,%edi
call   1030 <sqrt@plt>
mov    %eax,%r9d
xor    %r13d,%r13d
mov    $0x0,%ebp
cmp    $0x2,%eax
jl     12cc <nod+0x1bc>
lea    -0x1(%r9),%r8d
cmp    $0x2,%r9d
jne    1277 <nod+0x167>
xor    %ebp,%ebp
mov    $0x1,%edi
jmp    12b6 <nod+0x1a6>
and    $0xfffffffc,%eax
xor    %edx,%edx
mov    $0x1,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %edi,%ebp
xor    %edi,%edi
cmp    $0x1,%ebp
setne  %dil
lea    0x2(%rdx),%ecx
cmp    %esi,%edi
cmovne %edx,%ecx
lea    0x2(%rcx),%edx
cmp    $0xffffffff,%r14d
cmovne %ecx,%edx
lea    0x2(%rdx),%ecx
cmp    $0xffffffff,%r14d
cmovne %edx,%ecx
lea    0x2(%rcx),%edx
cmp    $0xffffffff,%r14d
cmovne %ecx,%edx
lea    0x4(%rbp),%edi
add    $0x3,%ebp
cmp    %eax,%ebp
jne    11c0 <nod+0xb0>
mov    %edx,%ebp
test   %ebx,%ebx
je     1228 <nod+0x118>
add    $0xffffffff,%edi
neg    %ebx
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
xor    %ecx,%ecx
cmp    %eax,%edi
setne  %cl
lea    0x2(%rdx),%ebp
cmp    %esi,%ecx
cmovne %edx,%ebp
add    $0xffffffff,%eax
mov    %ebp,%edx
cmp    %eax,%ebx
jne    1210 <nod+0x100>
mov    $0x1,%ebx
mov    $0x1,%eax
xor    %edx,%edx
idiv   %r8d
xor    %r12d,%r12d
cmp    %esi,%edx
sete   %r12b
mov    %r14d,%r15d
shr    $0x1f,%r15d
add    %r14d,%r15d
sar    %r15d
mov    %r15d,%edi
call   1030 <sqrt@plt>
mov    %eax,%r9d
cmp    $0x2,%eax
jl     1363 <nod+0x253>
lea    -0x1(%r9),%r8d
cmp    $0x2,%r9d
jne    1304 <nod+0x1f4>
xor    %r13d,%r13d
jmp    134a <nod+0x23a>
mov    %r8d,%esi
and    $0xfffffffe,%esi
xor    %ebp,%ebp
mov    $0x1,%edi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r15d,%eax
cltd
idiv   %edi
lea    0x2(%rbp),%ebx
test   %edx,%edx
cmovne %ebp,%ebx
lea    0x1(%rdi),%ecx
mov    %r15d,%eax
cltd
idiv   %ecx
lea    0x2(%rbx),%ebp
test   %edx,%edx
cmovne %ebx,%ebp
add    $0x2,%edi
cmp    %esi,%ecx
jne    1290 <nod+0x180>
test   $0x1,%r8b
je     12cc <nod+0x1bc>
mov    %r15d,%eax
cltd
idiv   %edi
lea    0x2(%rbp),%eax
test   %edx,%edx
cmovne %ebp,%eax
mov    %eax,%ebp
mov    %r15d,%eax
cltd
idiv   %r9d
cmp    $0x1,%edx
adc    $0x0,%ebp
mov    %r14d,%edi
call   1030 <sqrt@plt>
mov    %eax,%r9d
cmp    $0x2,%eax
jl     13c3 <nod+0x2b3>
lea    -0x1(%r9),%r8d
cmp    $0x2,%r9d
jne    136b <nod+0x25b>
xor    %r13d,%r13d
mov    $0x1,%edi
jmp    13aa <nod+0x29a>
mov    %r8d,%edi
and    $0xfffffffe,%edi
xor    %r13d,%r13d
mov    $0x1,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r15d,%eax
cltd
idiv   %ebx
lea    0x2(%r13),%esi
test   %edx,%edx
cmovne %r13d,%esi
lea    0x1(%rbx),%ecx
mov    %r15d,%eax
cltd
idiv   %ecx
lea    0x2(%rsi),%r13d
test   %edx,%edx
cmovne %esi,%r13d
add    $0x2,%ebx
cmp    %edi,%ecx
jne    1320 <nod+0x210>
test   $0x1,%r8b
je     1363 <nod+0x253>
mov    %r15d,%eax
cltd
idiv   %ebx
lea    0x2(%r13),%eax
test   %edx,%edx
cmovne %r13d,%eax
mov    %eax,%r13d
add    %r12d,%ebp
mov    %r15d,%eax
jmp    13c6 <nod+0x2b6>
mov    %r8d,%esi
and    $0xfffffffe,%esi
xor    %r13d,%r13d
mov    $0x1,%edi
nopl   0x0(%rax)
mov    %r14d,%eax
cltd
idiv   %edi
lea    0x2(%r13),%ebx
test   %edx,%edx
cmovne %r13d,%ebx
lea    0x1(%rdi),%ecx
mov    %r14d,%eax
cltd
idiv   %ecx
lea    0x2(%rbx),%r13d
test   %edx,%edx
cmovne %ebx,%r13d
add    $0x2,%edi
cmp    %esi,%ecx
jne    1380 <nod+0x270>
test   $0x1,%r8b
je     13c3 <nod+0x2b3>
mov    %r14d,%eax
cltd
idiv   %edi
lea    0x2(%r13),%eax
test   %edx,%edx
cmovne %r13d,%eax
mov    %eax,%r13d
mov    %r14d,%eax
cltd
idiv   %r9d
cmp    $0x1,%edx
adc    $0x0,%r13d
imul   %ebp,%r13d
mov    %r13d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @nod(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 %0, i32* %2
store i32 0, i32* %3
store i32 0, i32* %4
%7 = load i32, i32* %2
%8 = srem i32 %7, 2
%9 = icmp eq i32 %8, 0
br i1 %9, label %10, label %71
10: ; preds = %1
%11 = load i32, i32* %2
%12 = add nsw i32 %11, 1
%13 = call i32 @sqrt(i32 %12)
store i32 %13, i32* %6
store i32 1, i32* %5
br label %14
14: ; preds = %28, %10
%15 = load i32, i32* %5
%16 = load i32, i32* %6
%17 = icmp slt i32 %15, %16
br i1 %17, label %18, label %31
18: ; preds = %14
%19 = load i32, i32* %2
%20 = load i32, i32* %5
%21 = srem i32 1, %20
%22 = add nsw i32 %19, %21
%23 = icmp eq i32 %22, 0
br i1 %23, label %24, label %27
24: ; preds = %18
%25 = load i32, i32* %3
%26 = add nsw i32 %25, 2
store i32 %26, i32* %3
br label %27
27: ; preds = %24, %18
br label %28
28: ; preds = %27
%29 = load i32, i32* %5
%30 = add nsw i32 %29, 1
store i32 %30, i32* %5
br label %14
31: ; preds = %14
%32 = load i32, i32* %2
%33 = load i32, i32* %6
%34 = srem i32 1, %33
%35 = add nsw i32 %32, %34
%36 = icmp eq i32 %35, 0
br i1 %36, label %37, label %40
37: ; preds = %31
%38 = load i32, i32* %3
%39 = add nsw i32 %38, 1
store i32 %39, i32* %3
br label %40
40: ; preds = %37, %31
%41 = load i32, i32* %2
%42 = sdiv i32 %41, 2
%43 = call i32 @sqrt(i32 %42)
store i32 %43, i32* %6
store i32 1, i32* %5
br label %44
44: ; preds = %58, %40
%45 = load i32, i32* %5
%46 = load i32, i32* %6
%47 = icmp slt i32 %45, %46
br i1 %47, label %48, label %61
48: ; preds = %44
%49 = load i32, i32* %2
%50 = sdiv i32 %49, 2
%51 = load i32, i32* %5
%52 = srem i32 %50, %51
%53 = icmp eq i32 %52, 0
br i1 %53, label %54, label %57
54: ; preds = %48
%55 = load i32, i32* %4
%56 = add nsw i32 %55, 2
store i32 %56, i32* %4
br label %57
57: ; preds = %54, %48
br label %58
58: ; preds = %57
%59 = load i32, i32* %5
%60 = add nsw i32 %59, 1
store i32 %60, i32* %5
br label %44
61: ; preds = %44
%62 = load i32, i32* %2
%63 = sdiv i32 %62, 2
%64 = load i32, i32* %6
%65 = srem i32 %63, %64
%66 = icmp eq i32 %65, 0
br i1 %66, label %67, label %70
67: ; preds = %61
%68 = load i32, i32* %4
%69 = add nsw i32 %68, 1
store i32 %69, i32* %4
br label %70
70: ; preds = %67, %61
br label %132
71: ; preds = %1
%72 = load i32, i32* %2
%73 = add nsw i32 %72, 1
%74 = sdiv i32 %73, 2
%75 = call i32 @sqrt(i32 %74)
store i32 %75, i32* %6
store i32 1, i32* %5
br label %76
76: ; preds = %91, %71
%77 = load i32, i32* %5
%78 = load i32, i32* %6
%79 = icmp slt i32 %77, %78
br i1 %79, label %80, label %94
80: ; preds = %76
%81 = load i32, i32* %2
%82 = add nsw i32 %81, 1
%83 = sdiv i32 %82, 2
%84 = load i32, i32* %5
%85 = srem i32 %83, %84
%86 = icmp eq i32 %85, 0
br i1 %86, label %87, label %90
87: ; preds = %80
%88 = load i32, i32* %3
%89 = add nsw i32 %88, 2
store i32 %89, i32* %3
br label %90
90: ; preds = %87, %80
br label %91
91: ; preds = %90
%92 = load i32, i32* %5
%93 = add nsw i32 %92, 1
store i32 %93, i32* %5
br label %76
94: ; preds = %76
%95 = load i32, i32* %2
%96 = add nsw i32 %95, 1
%97 = sdiv i32 %96, 2
%98 = load i32, i32* %6
%99 = srem i32 %97, %98
%100 = icmp eq i32 %99, 0
br i1 %100, label %101, label %104
101: ; preds = %94
%102 = load i32, i32* %3
%103 = add nsw i32 %102, 1
store i32 %103, i32* %3
br label %104
104: ; preds = %101, %94
%105 = load i32, i32* %2
%106 = call i32 @sqrt(i32 %105)
store i32 %106, i32* %6
store i32 1, i32* %5
br label %107
107: ; preds = %120, %104
%108 = load i32, i32* %5
%109 = load i32, i32* %6
%110 = icmp slt i32 %108, %109
br i1 %110, label %111, label %123
111: ; preds = %107
%112 = load i32, i32* %2
%113 = load i32, i32* %5
%114 = srem i32 %112, %113
%115 = icmp eq i32 %114, 0
br i1 %115, label %116, label %119
116: ; preds = %111
%117 = load i32, i32* %4
%118 = add nsw i32 %117, 2
store i32 %118, i32* %4
br label %119
119: ; preds = %116, %111
br label %120
120: ; preds = %119
%121 = load i32, i32* %5
%122 = add nsw i32 %121, 1
store i32 %122, i32* %5
br label %107
123: ; preds = %107
%124 = load i32, i32* %2
%125 = load i32, i32* %6
%126 = srem i32 %124, %125
%127 = icmp eq i32 %126, 0
br i1 %127, label %128, label %131
128: ; preds = %123
%129 = load i32, i32* %4
%130 = add nsw i32 %129, 1
store i32 %130, i32* %4
br label %131
131: ; preds = %128, %123
br label %132
132: ; preds = %131, %70
%133 = load i32, i32* %3
%134 = load i32, i32* %4
%135 = mul nsw i32 %133, %134
ret i32 %135
}

LLVM IR (-O2):
define i32 @nod(i32 %0) {
%2 = and i32 %0, 1
%3 = icmp eq i32 %2, 0
%4 = add nsw i32 %0, 1
br i1 %3, label %5, label %98
5: ; preds = %1
%6 = tail call i32 @sqrt(i32 %4)
%7 = icmp sgt i32 %6, 1
%8 = sub i32 0, %0
br i1 %7, label %9, label %54
9: ; preds = %5
%10 = add i32 %6, -1
%11 = add i32 %6, -2
%12 = and i32 %10, 3
%13 = icmp ult i32 %11, 3
br i1 %13, label %37, label %14
14: ; preds = %9
%15 = and i32 %10, -4
%16 = icmp eq i32 %0, -1
%17 = icmp eq i32 %0, -1
%18 = icmp eq i32 %0, -1
br label %19
19: ; preds = %19, %14
%20 = phi i32 [ 1, %14 ], [ %34, %19 ]
%21 = phi i32 [ 0, %14 ], [ %33, %19 ]
%22 = phi i32 [ 0, %14 ], [ %35, %19 ]
%23 = icmp ne i32 %20, 1
%24 = zext i1 %23 to i32
%25 = icmp eq i32 %24, %8
%26 = add nsw i32 %21, 2
%27 = select i1 %25, i32 %26, i32 %21
%28 = add nsw i32 %27, 2
%29 = select i1 %16, i32 %28, i32 %27
%30 = add nsw i32 %29, 2
%31 = select i1 %17, i32 %30, i32 %29
%32 = add nsw i32 %31, 2
%33 = select i1 %18, i32 %32, i32 %31
%34 = add nuw nsw i32 %20, 4
%35 = add i32 %22, 4
%36 = icmp eq i32 %35, %15
br i1 %36, label %37, label %19
37: ; preds = %19, %9
%38 = phi i32 [ undef, %9 ], [ %33, %19 ]
%39 = phi i32 [ 1, %9 ], [ %34, %19 ]
%40 = phi i32 [ 0, %9 ], [ %33, %19 ]
%41 = icmp eq i32 %12, 0
br i1 %41, label %54, label %42
42: ; preds = %37, %42
%43 = phi i32 [ %51, %42 ], [ %39, %37 ]
%44 = phi i32 [ %50, %42 ], [ %40, %37 ]
%45 = phi i32 [ %52, %42 ], [ 0, %37 ]
%46 = icmp ne i32 %43, 1
%47 = zext i1 %46 to i32
%48 = icmp eq i32 %47, %8
%49 = add nsw i32 %44, 2
%50 = select i1 %48, i32 %49, i32 %44
%51 = add nuw nsw i32 %43, 1
%52 = add i32 %45, 1
%53 = icmp eq i32 %52, %12
br i1 %53, label %54, label %42
54: ; preds = %37, %42, %5
%55 = phi i32 [ 0, %5 ], [ %38, %37 ], [ %50, %42 ]
%56 = srem i32 1, %6
%57 = icmp eq i32 %56, %8
%58 = zext i1 %57 to i32
%59 = add nsw i32 %55, %58
%60 = sdiv i32 %0, 2
%61 = tail call i32 @sqrt(i32 %60)
%62 = icmp sgt i32 %61, 1
br i1 %62, label %63, label %95
63: ; preds = %54
%64 = add i32 %61, -1
%65 = and i32 %64, 1
%66 = icmp eq i32 %61, 2
br i1 %66, label %85, label %67
67: ; preds = %63
%68 = and i32 %64, -2
br label %69
69: ; preds = %69, %67
%70 = phi i32 [ 1, %67 ], [ %82, %69 ]
%71 = phi i32 [ 0, %67 ], [ %81, %69 ]
%72 = phi i32 [ 0, %67 ], [ %83, %69 ]
%73 = srem i32 %60, %70
%74 = icmp eq i32 %73, 0
%75 = add nsw i32 %71, 2
%76 = select i1 %74, i32 %75, i32 %71
%77 = add nuw nsw i32 %70, 1
%78 = srem i32 %60, %77
%79 = icmp eq i32 %78, 0
%80 = add nsw i32 %76, 2
%81 = select i1 %79, i32 %80, i32 %76
%82 = add nuw nsw i32 %70, 2
%83 = add i32 %72, 2
%84 = icmp eq i32 %83, %68
br i1 %84, label %85, label %69
85: ; preds = %69, %63
%86 = phi i32 [ undef, %63 ], [ %81, %69 ]
%87 = phi i32 [ 1, %63 ], [ %82, %69 ]
%88 = phi i32 [ 0, %63 ], [ %81, %69 ]
%89 = icmp eq i32 %65, 0
br i1 %89, label %95, label %90
90: ; preds = %85
%91 = srem i32 %60, %87
%92 = icmp eq i32 %91, 0
%93 = add nsw i32 %88, 2
%94 = select i1 %92, i32 %93, i32 %88
br label %95
95: ; preds = %90, %85, %54
%96 = phi i32 [ 0, %54 ], [ %86, %85 ], [ %94, %90 ]
%97 = srem i32 %60, %61
br label %177
98: ; preds = %1
%99 = sdiv i32 %4, 2
%100 = tail call i32 @sqrt(i32 %99)
%101 = icmp sgt i32 %100, 1
br i1 %101, label %102, label %134
102: ; preds = %98
%103 = add i32 %100, -1
%104 = and i32 %103, 1
%105 = icmp eq i32 %100, 2
br i1 %105, label %124, label %106
106: ; preds = %102
%107 = and i32 %103, -2
br label %108
108: ; preds = %108, %106
%109 = phi i32 [ 1, %106 ], [ %121, %108 ]
%110 = phi i32 [ 0, %106 ], [ %120, %108 ]
%111 = phi i32 [ 0, %106 ], [ %122, %108 ]
%112 = srem i32 %99, %109
%113 = icmp eq i32 %112, 0
%114 = add nsw i32 %110, 2
%115 = select i1 %113, i32 %114, i32 %110
%116 = add nuw nsw i32 %109, 1
%117 = srem i32 %99, %116
%118 = icmp eq i32 %117, 0
%119 = add nsw i32 %115, 2
%120 = select i1 %118, i32 %119, i32 %115
%121 = add nuw nsw i32 %109, 2
%122 = add i32 %111, 2
%123 = icmp eq i32 %122, %107
br i1 %123, label %124, label %108
124: ; preds = %108, %102
%125 = phi i32 [ undef, %102 ], [ %120, %108 ]
%126 = phi i32 [ 1, %102 ], [ %121, %108 ]
%127 = phi i32 [ 0, %102 ], [ %120, %108 ]
%128 = icmp eq i32 %104, 0
br i1 %128, label %134, label %129
129: ; preds = %124
%130 = srem i32 %99, %126
%131 = icmp eq i32 %130, 0
%132 = add nsw i32 %127, 2
%133 = select i1 %131, i32 %132, i32 %127
br label %134
134: ; preds = %129, %124, %98
%135 = phi i32 [ 0, %98 ], [ %125, %124 ], [ %133, %129 ]
%136 = srem i32 %99, %100
%137 = icmp eq i32 %136, 0
%138 = zext i1 %137 to i32
%139 = add nsw i32 %135, %138
%140 = tail call i32 @sqrt(i32 %0)
%141 = icmp sgt i32 %140, 1
br i1 %141, label %142, label %174
142: ; preds = %134
%143 = add i32 %140, -1
%144 = and i32 %143, 1
%145 = icmp eq i32 %140, 2
br i1 %145, label %164, label %146
146: ; preds = %142
%147 = and i32 %143, -2
br label %148
148: ; preds = %148, %146
%149 = phi i32 [ 1, %146 ], [ %161, %148 ]
%150 = phi i32 [ 0, %146 ], [ %160, %148 ]
%151 = phi i32 [ 0, %146 ], [ %162, %148 ]
%152 = srem i32 %0, %149
%153 = icmp eq i32 %152, 0
%154 = add nsw i32 %150, 2
%155 = select i1 %153, i32 %154, i32 %150
%156 = add nuw nsw i32 %149, 1
%157 = srem i32 %0, %156
%158 = icmp eq i32 %157, 0
%159 = add nsw i32 %155, 2
%160 = select i1 %158, i32 %159, i32 %155
%161 = add nuw nsw i32 %149, 2
%162 = add i32 %151, 2
%163 = icmp eq i32 %162, %147
br i1 %163, label %164, label %148
164: ; preds = %148, %142
%165 = phi i32 [ undef, %142 ], [ %160, %148 ]
%166 = phi i32 [ 1, %142 ], [ %161, %148 ]
%167 = phi i32 [ 0, %142 ], [ %160, %148 ]
%168 = icmp eq i32 %144, 0
br i1 %168, label %174, label %169
169: ; preds = %164
%170 = srem i32 %0, %166
%171 = icmp eq i32 %170, 0
%172 = add nsw i32 %167, 2
%173 = select i1 %171, i32 %172, i32 %167
br label %174
174: ; preds = %169, %164, %134
%175 = phi i32 [ 0, %134 ], [ %165, %164 ], [ %173, %169 ]
%176 = srem i32 %0, %140
br label %177
177: ; preds = %174, %95
%178 = phi i32 [ %176, %174 ], [ %97, %95 ]
%179 = phi i32 [ %175, %174 ], [ %96, %95 ]
%180 = phi i32 [ %139, %174 ], [ %59, %95 ]
%181 = icmp eq i32 %178, 0
%182 = zext i1 %181 to i32
%183 = add nsw i32 %179, %182
%184 = mul nsw i32 %183, %180
ret i32 %184
}