Problem:
四つ子素数

(a, a+2, a+6, a+8) のように並んだ 4 つの素数の組を四つ子素数といいます。四つ子素数を構成する四つの素数のうち、最大の数をその四つ子素数の大きさと呼びます。例えば、最も小さい大きさの四つ子素数は、(5, 7, 11, 13) の組であり、その大きさは 13 です。次に大きい四つ子素数は、(11, 13, 17, 19) の組で、その大きさは 19 です。

整数 n (13 ≤ n ≤ 10,000,000) を入力とし、大きさが n 以下になるような四つ子素数のうち、最大となるものの大きさを出力するプログラムを作成してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットとして１つの整数 n が１行に与えられます。

データセットの数は 2000 を超えません。

Output

入力データセットごとに、最大となる四つ子素数の大きさを1行に出力します。

Sample Input

13
14
15
16
17
18
19
20
10000
0

Output for the Sample Input

13
13
13
13
13
13
19
19
9439

Solution in JAVA (judge verdict: Accepted)

import java.util.*;

public class Main{
  //O()
  //テ・ツ可催・ツ?ヲテァツ青?」ツ?ォテヲツ卍づゥツ鳴禿」ツ?古」ツ?凝」ツ?凝」ツつ凝」ツ?古」ツ??ァツエツ?ヲツ閉ーティツ。ツィテ」ツつ津、ツスツソテ」ツ??・ツ崢榲」ツ?崚」ツつ凝・ツ按?」ツ?（sPrimeテ」ツつ暗」ツつ甘ゥツ?淌」ツ??
  static boolean[] erato(int n){
    boolean[] prime = new boolean[n + 1];
    Arrays.fill(prime, true);
    prime[0] = prime[1] = false;

    for(int i = 2; i * i <= n; i++){
      if(!prime[i]) continue;
      for(int j = i + i; j <= n; j += i){
        prime[j] = false;
      }
    }

    return prime;
  }

  //O( sqrt(n) )
  //テ」ツつィテ」ツδゥテ」ツδ暗」ツつケテ」ツδ?」ツδ催」ツつケテ」ツ?ァテァツエツ?ヲツ閉ーティツ。ツィテ」ツつ津、ツスツ愿」ツつ凝ヲツ鳴ケテ」ツ?古ゥツォツ佚ゥツ??
  //  -> テァツオツ静ヲツ楪弋LE
  static boolean isPrime(int n){
    if(n <= 1) return false;

    for(int i = 2; i * i <= n; i++){
      if(n % i == 0){
        return false;
      }
    }
    return true;
  }

  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    boolean[] prime = erato(10000000);

    while(true){
      int n = sc.nextInt();
      if(n == 0) break;

      while(true){
        if(prime[n] && prime[n - 2] && prime[n - 6] && prime[n - 8]){
          break;
        }
        n--;
      }

      System.out.println(n);
    }
  }
}