結果
| 問題 | No.12 限定された素数 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2022-01-20 17:49:33 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 483 ms / 5,000 ms | 
| コード長 | 970 bytes | 
| コンパイル時間 | 449 ms | 
| コンパイル使用メモリ | 82,576 KB | 
| 実行使用メモリ | 140,512 KB | 
| 最終ジャッジ日時 | 2024-11-24 00:28:23 | 
| 合計ジャッジ時間 | 11,251 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 26 | 
ソースコード
import sys
input = sys.stdin.readline
def main():
    MAXN = 5000000
    N = int(input())
    if N == 10:
        print(MAXN-1)
        return
    *A, = map(int, input().split())
    mask = 0
    for i in A:
        mask |= 1 << i
    sieve = [True]*(MAXN+1)
    primes = [(0, -1)]
    def msk(x):
        ans = 0
        while x > 0:
            ans |= 1 << (x % 10)
            x //= 10
        return ans
    for i in range(2, MAXN+1):
        if sieve[i]:
            primes.append((i, msk(i)))
            for j in range(i*i, MAXN+1, i):
                sieve[j] = False
    primes.append((MAXN+1, -1))
    ans = -1
    k = l = 1
    num_mask = 0
    for l in range(1, len(primes)-1):
        num_mask |= primes[l][1]
        if num_mask == mask:
            ans = max(ans, primes[l+1][0] - primes[k-1][0] - 2)
        elif (num_mask | mask) != mask:
            k = l + 1
            num_mask = 0
    print(ans)
if __name__ == '__main__':
    main()
            
            
            
        