結果
問題 | No.12 限定された素数 |
ユーザー | mastersatoshi |
提出日時 | 2015-08-04 13:50:39 |
言語 | Java21 (openjdk 21) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,229 bytes |
コンパイル時間 | 2,550 ms |
コンパイル使用メモリ | 81,276 KB |
実行使用メモリ | 81,080 KB |
最終ジャッジ日時 | 2024-07-18 01:14:40 |
合計ジャッジ時間 | 15,745 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | AC | 479 ms
69,388 KB |
testcase_02 | AC | 396 ms
64,360 KB |
testcase_03 | AC | 415 ms
64,888 KB |
testcase_04 | WA | - |
testcase_05 | AC | 489 ms
69,592 KB |
testcase_06 | AC | 475 ms
69,380 KB |
testcase_07 | AC | 508 ms
69,748 KB |
testcase_08 | AC | 480 ms
69,624 KB |
testcase_09 | AC | 471 ms
69,716 KB |
testcase_10 | AC | 486 ms
69,836 KB |
testcase_11 | AC | 493 ms
69,592 KB |
testcase_12 | AC | 486 ms
69,744 KB |
testcase_13 | AC | 491 ms
69,248 KB |
testcase_14 | AC | 484 ms
69,692 KB |
testcase_15 | AC | 480 ms
69,800 KB |
testcase_16 | AC | 515 ms
69,960 KB |
testcase_17 | AC | 373 ms
64,116 KB |
testcase_18 | AC | 393 ms
64,080 KB |
testcase_19 | AC | 392 ms
64,104 KB |
testcase_20 | WA | - |
testcase_21 | AC | 470 ms
69,852 KB |
testcase_22 | WA | - |
testcase_23 | WA | - |
testcase_24 | WA | - |
testcase_25 | AC | 465 ms
69,540 KB |
ソースコード
import java.io.*; import java.util.*; public class Main { static boolean[] a = new boolean[10]; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for (int i = 0; i < n; i++) { a[sc.nextInt()] = true; } ArrayList<Integer> prime = getPrime(); int miniMax = Integer.MIN_VALUE; for (int i = 0; i < prime.size(); i++) { TreeMap<Integer, Integer> nums = getNum(prime.get(i)); if (!isTrue(nums)) { continue; } int miniIndex = i; int maxIndex = 0; i++; boolean[] tmpA = a.clone(); cieve(tmpA, nums); for (; i < prime.size(); i++) { nums = getNum(prime.get(i)); if (!isTrue(nums)) { break; } maxIndex = i; cieve(tmpA, nums); } boolean include = true; for (boolean a : tmpA) { if (a) { include = false; break; } } if (!include) { continue; } int min; int max; if (miniIndex == 0) { min = 1; } else { min = prime.get(miniIndex - 1) + 1; } if (maxIndex == prime.size() - 1) { max = 5000000; } else { max = prime.get(maxIndex + 1) - 1; } if (miniMax < max - min) { miniMax = max - min; } } if (miniMax == Integer.MIN_VALUE) { System.out.println(-1); } else { System.out.println(miniMax); } } private static ArrayList<Integer> getPrime() { boolean[] cieve = new boolean[5000001]; cieve[0] = true; cieve[1] = true; int max = (int) Math.sqrt(5000000); for (int i = 2; i <= max; i++) { if (cieve[i]) { continue; } for (int j = i; j * i < 5000000; j++) { cieve[j * i] = true; } } ArrayList<Integer> ret = new ArrayList(); for (int i = 0; i < 5000000; i++) { if (!cieve[i]) { ret.add(i); } } return ret; } private static TreeMap<Integer, Integer> getNum(int num) { TreeMap<Integer, Integer> ret = new TreeMap(); while (num != 0) { ret.put(num % 10, 0); num = num / 10; } return ret; } private static boolean isTrue(TreeMap<Integer, Integer> nums) { for (int num : nums.keySet()) { if (!a[num]) { return false; } } return true; } private static void cieve(boolean[] tmpA, TreeMap<Integer, Integer> nums) { for (int num : nums.keySet()) { tmpA[num] = false; } } }