Problem:
Problem D : Numbers

n が与えられるので、n 個の連続した正の整数を求めよ。
ただしすべての数が、１とその数自身以外の約数をもたなくてはならない。

Input

入力は以下のフォーマットで与えられる。

n

入力は以下の制約を満たす。

1 ≤ n ≤ 1,500

Output

最初の行に、あなたが選んだ連続したn 個の正の整数の中で一番小さいものを出力せよ。

2行目からn+1 行目に、それぞれの値に対する約数を出力せよ。

約数は1かその数自身でなければどの値を出力しても良い。

1行目に出力した数をxとして、i行目には x+i-2 の約数を出力せよ。

出力する値は5,000桁を超えてはいけない。

Sample Input 1

2

Sample Output 1

8
2
3

Sample Input 2

3

Sample Output 2

8
2
3
5

Hint

Sample Output 2では、8,9,10を3個の連続した整数として選んでいる。

2行目に、8の約数として2,3行目は9の約数として3,４行目には10の約数として5,を出力している。

Solution in JAVA (judge verdict: Runtime Error)

import java.util.*;
public class Main{
    public static void main(String[] args){
	new Main().run();
    }
    Scanner sc = new Scanner(System.in);

    int[] divisor;
    boolean solved;

    void run(){
	divisor = new int[10000000];
	setDivisor();
	while(sc.hasNext()){
	    int n = sc.nextInt();
	    solved = false;
	    for(int i=1; i<divisor.length; i++){
		if(solved) break;
		solve(n, i);
	    } 
	}
    }

    // ans をスタートの数として、後ろを調べて、有効なら改めて表示
    void solve(int n, int ans){
	for(int i=ans; i<ans+n; i++){
	    if(divisor[i]==1) return;
	}
	System.out.println(ans);
	for(int i=ans; i<ans+n; i++){
	    System.out.println(divisor[i]);
	}
	solved = true;
    }

    void setDivisor(){
	Arrays.fill(divisor, 1);
	for(int i=2; i<divisor.length; i++)
	    if(divisor[i]==1)
		for(int j=i+i; j<divisor.length; j+=i)
		    divisor[j] = i;
    }
}