結果

問題 No.12 限定された素数
ユーザー ym678ym678
提出日時 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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 269 ms
55,620 KB
testcase_01 AC 252 ms
55,488 KB
testcase_02 AC 262 ms
55,416 KB
testcase_03 AC 268 ms
55,604 KB
testcase_04 AC 248 ms
55,600 KB
testcase_05 AC 276 ms
55,488 KB
testcase_06 AC 267 ms
55,436 KB
testcase_07 AC 275 ms
55,460 KB
testcase_08 AC 272 ms
55,320 KB
testcase_09 AC 270 ms
55,392 KB
testcase_10 AC 259 ms
55,572 KB
testcase_11 AC 250 ms
55,364 KB
testcase_12 AC 270 ms
55,460 KB
testcase_13 AC 251 ms
55,432 KB
testcase_14 AC 256 ms
55,512 KB
testcase_15 AC 268 ms
55,388 KB
testcase_16 AC 273 ms
55,608 KB
testcase_17 AC 261 ms
55,696 KB
testcase_18 AC 269 ms
55,416 KB
testcase_19 AC 268 ms
55,688 KB
testcase_20 AC 271 ms
55,588 KB
testcase_21 AC 248 ms
55,628 KB
testcase_22 AC 272 ms
55,368 KB
testcase_23 AC 273 ms
55,868 KB
testcase_24 AC 270 ms
55,524 KB
testcase_25 AC 268 ms
55,492 KB
権限があれば一括ダウンロードができます

ソースコード

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