結果
| 問題 | No.12 限定された素数 |
| コンテスト | |
| ユーザー |
37zigen
|
| 提出日時 | 2016-04-12 16:28:09 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 369 ms / 5,000 ms |
| コード長 | 1,372 bytes |
| 記録 | |
| コンパイル時間 | 2,179 ms |
| コンパイル使用メモリ | 77,188 KB |
| 実行使用メモリ | 48,720 KB |
| 最終ジャッジ日時 | 2024-11-24 08:48:52 |
| 合計ジャッジ時間 | 11,468 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
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));}
}
37zigen