結果

問題 No.12 限定された素数
ユーザー ym678ym678
提出日時 2016-07-27 12:31:51
言語 Java21
(openjdk 21)
結果
AC  
実行時間 267 ms / 5,000 ms
コード長 1,418 bytes
コンパイル時間 2,160 ms
コンパイル使用メモリ 79,660 KB
実行使用メモリ 65,404 KB
最終ジャッジ日時 2024-05-03 09:53:38
合計ジャッジ時間 9,639 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 246 ms
65,340 KB
testcase_01 AC 247 ms
65,388 KB
testcase_02 AC 236 ms
65,212 KB
testcase_03 AC 249 ms
65,272 KB
testcase_04 AC 252 ms
65,040 KB
testcase_05 AC 258 ms
65,288 KB
testcase_06 AC 251 ms
65,328 KB
testcase_07 AC 267 ms
65,332 KB
testcase_08 AC 255 ms
64,956 KB
testcase_09 AC 233 ms
65,048 KB
testcase_10 AC 264 ms
65,404 KB
testcase_11 AC 259 ms
65,312 KB
testcase_12 AC 249 ms
65,252 KB
testcase_13 AC 226 ms
65,184 KB
testcase_14 AC 255 ms
65,196 KB
testcase_15 AC 246 ms
65,404 KB
testcase_16 AC 230 ms
65,056 KB
testcase_17 AC 243 ms
65,260 KB
testcase_18 AC 254 ms
65,308 KB
testcase_19 AC 254 ms
65,104 KB
testcase_20 AC 258 ms
64,964 KB
testcase_21 AC 232 ms
65,212 KB
testcase_22 AC 254 ms
65,228 KB
testcase_23 AC 250 ms
65,216 KB
testcase_24 AC 245 ms
64,972 KB
testcase_25 AC 250 ms
65,196 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