結果
| 問題 | 
                            No.12 限定された素数
                             | 
                    
| コンテスト | |
| ユーザー | 
                             nsd_fb
                         | 
                    
| 提出日時 | 2015-02-19 07:17:54 | 
| 言語 | Python2  (2.7.18)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 3,043 ms / 5,000 ms | 
| コード長 | 1,079 bytes | 
| コンパイル時間 | 301 ms | 
| コンパイル使用メモリ | 6,912 KB | 
| 実行使用メモリ | 56,404 KB | 
| 最終ジャッジ日時 | 2024-11-24 07:56:28 | 
| 合計ジャッジ時間 | 78,588 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge5 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 26 | 
ソースコード
def sieve(n):
    res = []
    is_prime = [True] * (n + 1)
    
    for i in xrange(2, n + 1):
        if is_prime[i]:
            res.append(i)
            for j in xrange(i * i, n + 1, i):
                is_prime[j] = False
    return res
def ng(need, numbers):
    for d in numbers:
        if not need[d]:
            return True
        
    return False
def ok(need, exist):
    for n, e in zip(need, exist):
        if n and not e:
            return False
    return True
primes = sieve(5000000)
n = input()
need = [False] * 10
for a in map(int, raw_input().split()):
    need[a] = True
ans = -1
prev = 1
l = 0
while l < len(primes):
    r = l
    exist = [False] * 10
    while r < len(primes):
        numbers = map(int, str(primes[r]))
        if ng(need, numbers):
            break
        for d in numbers:
            exist[d] = True
        r += 1
    current = primes[r] - 1 if r < len(primes) else 5000000
    if ok(need, exist):
        diff = current - prev
        ans = max(ans, diff)
        
    prev = current + 2
    l = r + 1
print ans
            
            
            
        
            
nsd_fb