結果

問題 No.12 限定された素数
ユーザー 37zigen37zigen
提出日時 2016-04-12 16:28:09
言語 Java21
(openjdk 21)
結果
AC  
実行時間 373 ms / 5,000 ms
コード長 1,372 bytes
コンパイル時間 3,192 ms
コンパイル使用メモリ 79,308 KB
実行使用メモリ 62,340 KB
最終ジャッジ日時 2023-08-15 23:25:32
合計ジャッジ時間 11,276 ms
ジャッジサーバーID
(参考情報)
judge11 / judge15
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 341 ms
58,780 KB
testcase_01 AC 288 ms
60,828 KB
testcase_02 AC 274 ms
61,276 KB
testcase_03 AC 262 ms
59,996 KB
testcase_04 AC 261 ms
60,408 KB
testcase_05 AC 354 ms
62,340 KB
testcase_06 AC 291 ms
60,824 KB
testcase_07 AC 293 ms
60,584 KB
testcase_08 AC 272 ms
60,848 KB
testcase_09 AC 302 ms
60,348 KB
testcase_10 AC 316 ms
61,580 KB
testcase_11 AC 320 ms
61,352 KB
testcase_12 AC 331 ms
61,728 KB
testcase_13 AC 313 ms
61,248 KB
testcase_14 AC 311 ms
61,496 KB
testcase_15 AC 316 ms
61,680 KB
testcase_16 AC 337 ms
61,260 KB
testcase_17 AC 364 ms
60,912 KB
testcase_18 AC 281 ms
60,924 KB
testcase_19 AC 277 ms
61,044 KB
testcase_20 AC 280 ms
61,320 KB
testcase_21 AC 322 ms
61,180 KB
testcase_22 AC 310 ms
58,936 KB
testcase_23 AC 299 ms
60,820 KB
testcase_24 AC 373 ms
60,796 KB
testcase_25 AC 312 ms
59,748 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