結果
| 問題 | No.12 限定された素数 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2016-07-27 12:31:51 | 
| 言語 | Java (openjdk 23) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 276 ms / 5,000 ms | 
| コード長 | 1,418 bytes | 
| コンパイル時間 | 2,283 ms | 
| コンパイル使用メモリ | 79,068 KB | 
| 実行使用メモリ | 55,868 KB | 
| 最終ジャッジ日時 | 2024-11-24 08:57:35 | 
| 合計ジャッジ時間 | 10,289 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 26 | 
ソースコード
import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] A = new int[N];
        
        boolean[] box = new boolean[5000001];
        ArrayList<Integer> sosu = new ArrayList<>();
        Arrays.fill(box,2,box.length,true);
        sosu.add(0);
        for(int i=2 ; i<5000001; i++){
        	if(box[i]){
        		sosu.add(i);
        		for(int j=i*2; j<5000001; j+=i){
        			box[j] = false;
        		}
        	}
        }
        sosu.add(5000001);
        int tage = 0;
        
        for(int i=0; i<N; i++){
        	A[i] = sc.nextInt();
        	tage |= (1<<A[i]);
        }
        
        int sub;
        int sub_bit = 0;
        int bit = 0;
        int ans = -1;
        int right = 1;
        int left = 1;
  
     
        for(int i=1; i<sosu.size()-1; i++){
        	sub = sosu.get(i);
        	bit = 0;
            while(sub>0){
        	    bit |= (1<<sub%10);
        	    sub /= 10;
        	}
        	    
            sub_bit |= bit;
            right = i;
        	    
        	if(sub_bit == tage){
        	    ans = Math.max(ans,(sosu.get(right+1)-1)-(sosu.get(left-1)+1));
        	}else if((sub_bit|tage) - tage > 0){
        	    left = i+1;
        	    right = i+1;
        	    sub_bit = 0;
            }
        }      
        System.out.println(ans);
    }
}
            
            
            
        