結果

問題 No.12 限定された素数
ユーザー ym678
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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);
    }
}
0