結果
問題 |
No.458 異なる素数の和
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:28:18 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,474 bytes |
コンパイル時間 | 227 ms |
コンパイル使用メモリ | 82,776 KB |
実行使用メモリ | 62,224 KB |
最終ジャッジ日時 | 2025-03-20 20:29:37 |
合計ジャッジ時間 | 2,361 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 WA * 14 |
ソースコード
import sys import math def sieve(n): sieve = [True] * (n + 1) sieve[0] = sieve[1] = False for i in range(2, int(math.sqrt(n)) + 1): if sieve[i]: sieve[i*i : n+1 : i] = [False] * len(sieve[i*i : n+1 : i]) primes = [i for i, is_p in enumerate(sieve) if is_p] return primes def main(): N = int(sys.stdin.readline()) if N < 2: print(-1) return max_prime_check = 2 * N primes_sieve = sieve(max_prime_check) primes_set = set(primes_sieve) primes = [] sum_primes = [] current_sum = 0 for p in primes_sieve: if current_sum + p > N: break primes.append(p) current_sum += p sum_primes.append(current_sum) if current_sum == N: break # Exact sum found, no need to proceed for i in range(len(sum_primes) - 1, -1, -1): s = sum_primes[i] if s > N: continue d = N - s if d == 0: print(i + 1) return p_max = primes[i] x = p_max + d if x > max_prime_check: continue # Beyond sieve limit; but per sieve setup, this should be covered if x in primes_set: if i == 0: print(1) return else: if x > primes[i - 1]: print(i + 1) return print(-1) if __name__ == "__main__": main()