int STT(int n) {
  int s[26] = {0,  2,  3,  5,  7,  11, 13, 17, 19, 23, 29, 31, 37,
               41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
  int a;
  for (a = 1; a <= 46; a++)
    if (n == s[a])
      return 2;
    else if (n % s[a] == 0)
      return 0;
  return 1;
}


x86 assembly (clang, -O0):
<STT>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %edi,-0x8(%rbp)
lea    -0x70(%rbp),%rdi
lea    0xed7(%rip),%rsi
mov    $0x68,%edx
call   1030 <memcpy@plt>
movl   $0x1,-0x74(%rbp)
cmpl   $0x2e,-0x74(%rbp)
jg     119a <STT+0x8a>
mov    -0x8(%rbp),%eax
movslq -0x74(%rbp),%rcx
cmp    -0x70(%rbp,%rcx,4),%eax
jne    1161 <STT+0x51>
movl   $0x2,-0x4(%rbp)
jmp    11a1 <STT+0x91>
mov    -0x8(%rbp),%eax
movslq -0x74(%rbp),%rcx
cltd
idivl  -0x70(%rbp,%rcx,4)
cmp    $0x0,%edx
jne    1182 <STT+0x72>
movl   $0x0,-0x4(%rbp)
jmp    11a1 <STT+0x91>
jmp    1187 <STT+0x77>
jmp    118c <STT+0x7c>
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    113a <STT+0x2a>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<STT>:
mov    %edi,%r9d
mov    $0x2,%esi
lea    0xef1(%rip),%r8
nop
mov    -0x4(%r8,%rsi,4),%edi
mov    $0x2,%ecx
cmp    %r9d,%edi
je     1153 <STT+0x53>
mov    %r9d,%eax
cltd
idiv   %edi
test   %edx,%edx
je     1151 <STT+0x51>
mov    (%r8,%rsi,4),%edi
cmp    %r9d,%edi
je     1153 <STT+0x53>
mov    %r9d,%eax
cltd
idiv   %edi
mov    $0x0,%ecx
test   %edx,%edx
je     1153 <STT+0x53>
add    $0x2,%rsi
cmp    $0x30,%rsi
jne    1110 <STT+0x10>
mov    $0x1,%eax
ret
xor    %ecx,%ecx
mov    %ecx,%eax
ret

LLVM IR (-O0):
@__const.STT.s = [26 x i32] [i32 0, i32 2, i32 3, i32 5, i32 7, i32 11, i32 13, i32 17, i32 19, i32 23, i32 29, i32 31, i32 37, i32 41, i32 43, i32 47, i32 53, i32 59, i32 61, i32 67, i32 71, i32 73, i32 79, i32 83, i32 89, i32 97]
define i32 @STT(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca [26 x i32]
%5 = alloca i32
store i32 %0, i32* %3
%6 = bitcast [26 x i32]* %4 to i8*
store i32 1, i32* %5
br label %7
7: ; preds = %29, %1
%8 = load i32, i32* %5
%9 = icmp sle i32 %8, 46
br i1 %9, label %10, label %32
10: ; preds = %7
%11 = load i32, i32* %3
%12 = load i32, i32* %5
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds [26 x i32], [26 x i32]* %4, i64 0, i64 %13
%15 = load i32, i32* %14
%16 = icmp eq i32 %11, %15
br i1 %16, label %17, label %18
17: ; preds = %10
store i32 2, i32* %2
br label %33
18: ; preds = %10
%19 = load i32, i32* %3
%20 = load i32, i32* %5
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [26 x i32], [26 x i32]* %4, i64 0, i64 %21
%23 = load i32, i32* %22
%24 = srem i32 %19, %23
%25 = icmp eq i32 %24, 0
br i1 %25, label %26, label %27
26: ; preds = %18
store i32 0, i32* %2
br label %33
27: ; preds = %18
br label %28
28: ; preds = %27
br label %29
29: ; preds = %28
%30 = load i32, i32* %5
%31 = add nsw i32 %30, 1
store i32 %31, i32* %5
br label %7
32: ; preds = %7
store i32 1, i32* %2
br label %33
33: ; preds = %32, %26, %17
%34 = load i32, i32* %2
ret i32 %34
}

LLVM IR (-O2):
@__const.STT.s = [26 x i32] [i32 0, i32 2, i32 3, i32 5, i32 7, i32 11, i32 13, i32 17, i32 19, i32 23, i32 29, i32 31, i32 37, i32 41, i32 43, i32 47, i32 53, i32 59, i32 61, i32 67, i32 71, i32 73, i32 79, i32 83, i32 89, i32 97]
define i32 @STT(i32 %0) {
br label %13
2: ; preds = %18
%3 = add nuw nsw i64 %14, 1
%4 = getelementptr inbounds [26 x i32], [26 x i32]* @__const.STT.s, i64 0, i64 %3
%5 = load i32, i32* %4
%6 = icmp eq i32 %5, %0
br i1 %6, label %21, label %7
7: ; preds = %2
%8 = srem i32 %0, %5
%9 = icmp eq i32 %8, 0
br i1 %9, label %21, label %10
10: ; preds = %7
%11 = add nuw nsw i64 %14, 2
%12 = icmp eq i64 %11, 47
br i1 %12, label %21, label %13
13: ; preds = %10, %1
%14 = phi i64 [ 1, %1 ], [ %11, %10 ]
%15 = getelementptr inbounds [26 x i32], [26 x i32]* @__const.STT.s, i64 0, i64 %14
%16 = load i32, i32* %15
%17 = icmp eq i32 %16, %0
br i1 %17, label %21, label %18
18: ; preds = %13
%19 = srem i32 %0, %16
%20 = icmp eq i32 %19, 0
br i1 %20, label %21, label %2
21: ; preds = %10, %7, %2, %18, %13
%22 = phi i32 [ 2, %13 ], [ 0, %18 ], [ 2, %2 ], [ 0, %7 ], [ 1, %10 ]
ret i32 %22
}