結果

問題 No.12 限定された素数
ユーザー 37zigen37zigen
提出日時 2016-04-12 16:28:09
言語 Java21
(openjdk 21)
結果
AC  
実行時間 413 ms / 5,000 ms
コード長 1,372 bytes
コンパイル時間 2,246 ms
コンパイル使用メモリ 77,756 KB
実行使用メモリ 60,332 KB
最終ジャッジ日時 2024-05-03 09:49:15
合計ジャッジ時間 12,745 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 389 ms
59,420 KB
testcase_01 AC 328 ms
58,680 KB
testcase_02 AC 315 ms
59,936 KB
testcase_03 AC 295 ms
58,440 KB
testcase_04 AC 317 ms
58,820 KB
testcase_05 AC 404 ms
60,332 KB
testcase_06 AC 334 ms
58,940 KB
testcase_07 AC 343 ms
59,272 KB
testcase_08 AC 321 ms
59,076 KB
testcase_09 AC 328 ms
58,404 KB
testcase_10 AC 363 ms
60,072 KB
testcase_11 AC 366 ms
59,888 KB
testcase_12 AC 378 ms
59,668 KB
testcase_13 AC 367 ms
59,812 KB
testcase_14 AC 372 ms
59,704 KB
testcase_15 AC 369 ms
59,800 KB
testcase_16 AC 392 ms
59,524 KB
testcase_17 AC 413 ms
59,344 KB
testcase_18 AC 328 ms
59,348 KB
testcase_19 AC 327 ms
59,296 KB
testcase_20 AC 335 ms
58,796 KB
testcase_21 AC 342 ms
59,280 KB
testcase_22 AC 345 ms
59,496 KB
testcase_23 AC 344 ms
59,232 KB
testcase_24 AC 403 ms
59,304 KB
testcase_25 AC 352 ms
58,048 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

package yukicoder;
import java.util.*;
public class Main{
	public static void main(String[] args)throws Exception{
		new Main().solve();
	}
	void solve(){
		Scanner sc=new Scanner(System.in);
		int[] d=new int[10];
		int n=sc.nextInt();
		for(int i=0;i<n;i++){
			d[sc.nextInt()]++;
		}
		boolean[] primeList=primeList(5000000);

		int memo[]=new int[10];
		int max=-1;
		//k...i
		for(int k=1,i=k;i<=5000000&&k<=5000000;i++){
			if(primeList[i]){
				int a=i;
				while(a>=1){
					memo[a%10]++;
					a/=10;
				}
			}
			if(check(d,memo)==-30){
				max=Math.max(i-k,max);
			}else if(check(d,memo)==-20){
				//継続して右側に進む
			}else if(check(d,memo)==-10){
				while(check(d,memo)==-10){
					if(primeList[k]){
						int b=k;
						while(b>=1){
							memo[b%10]--;
							b/=10;
						}
					}
					k++;
				}
			}
		}
		System.out.println(max);
	}
	boolean[] primeList(int n){
		boolean[] primeList=new boolean[n+1];
		Arrays.fill(primeList, true);
		primeList[0]=primeList[1]=false;
		for(int i=2;i<=n;i++){
			if(primeList[i]==true){
				for(int j=2;i*j<=n;j++){
					primeList[i*j]=false;
				}
			}
		}
		return primeList;
	}
	int check(int[] d,int[] memo){
		for(int i=0;i<10;i++){
			if(d[i]==1&&memo[i]==0)return -20;
			if(d[i]==0&&memo[i]>0)return -10;
		}
		return -30;
	}
	void tr(Object...o){System.out.println(Arrays.deepToString(o));}


}
0