結果
| 問題 | No.12 限定された素数 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-08-07 02:18:52 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 1,021 ms / 5,000 ms |
| コード長 | 1,583 bytes |
| 記録 | |
| コンパイル時間 | 311 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 49,260 KB |
| 最終ジャッジ日時 | 2024-11-24 08:28:47 |
| 合計ジャッジ時間 | 14,704 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
def primes2(limit):
''' returns a list of prime numbers upto limit.
source: Rossetta code: Sieve of Eratosthenes
http://rosettacode.org/wiki/Sieve_of_Eratosthenes#Odds-only_version_of_the_array_sieve_above
'''
if limit < 2: return []
if limit < 3: return [2]
lmtbf = (limit - 3) // 2
buf = [True] * (lmtbf + 1)
for i in range((int(limit ** 0.5) - 3) // 2 + 1):
if buf[i]:
p = i + i + 3
s = p * (i + 1) + i
buf[s::p] = [False] * ((lmtbf - s) // p + 1)
return [2] + [i + i + 3 for i, v in enumerate(buf) if v]
def read_data():
N = int(input())
A = list(map(int, input().split()))
return N, A
def solve(N, A):
limit = 5 * 10**6
primes = primes2(limit)
NGs = [True] * 10
for a in A:
NGs[a] = False
OKset = set(A)
prev_p = 0
maxspan = -1
currentset = set()
for p in primes:
if is_safe(p, NGs):
update_set(currentset, p)
continue
elif currentset == OKset:
span = p - prev_p - 2
if maxspan < span:
maxspan = span
currentset = set()
prev_p = p
p = limit
if currentset == OKset:
span = p - prev_p - 1
if maxspan < span:
maxspan = span
return maxspan
def is_safe(p, NGs):
while p:
p, r = divmod(p, 10)
if NGs[r]:
return False
return True
def update_set(currentset, p):
while p:
p, r = divmod(p, 10)
currentset.add(r)
N, A = read_data()
print(solve(N, A))