結果
| 問題 | No.6 使いものにならないハッシュ | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2023-01-15 15:58:29 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 128 ms / 5,000 ms | 
| コード長 | 1,103 bytes | 
| コンパイル時間 | 279 ms | 
| コンパイル使用メモリ | 82,576 KB | 
| 実行使用メモリ | 108,416 KB | 
| 最終ジャッジ日時 | 2024-12-28 09:04:37 | 
| 合計ジャッジ時間 | 4,789 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 32 | 
ソースコード
# nまでの素数を要素にもつ集合を返す関数
def primesUpTo(n):
    primes=set(range(2,n+1))
    for i in range(2,n):
        if i in primes:
            it = i ** 2
            while it <= n:
                if it in primes:
                    primes.remove(it)
                it += i
    return primes
def digit_hash(n):
    result=0
    while(n!=0):
        result+=n%10
        n//=10
    if result<10:
        return result
    else:
        return digit_hash(result)
k=int(input())
n=int(input())
P=sorted(list(primesUpTo(n)))
from collections import deque
Q=deque()
cnt=0
max_cnt=0
hash=[0 for _ in range(10)]
max_p=0
for i in range(len(P)):
    p=P[i]
    if p<k:
        continue
    sp=digit_hash(p)
    if hash[sp]==0:
        hash[sp]=1
        cnt+=1
    else:
        while(True):
            q=Q.popleft()
            sq=digit_hash(q)
            hash[sq]=0
            cnt-=1
            if sq==sp:
                hash[sp]=1
                cnt+=1
                break
    Q.append(p)
    if cnt>=max_cnt:
        max_cnt=cnt
        max_p=i-cnt+1
print(P[max_p])
            
            
            
        