Skip to content

Instantly share code, notes, and snippets.

@nariaki3551
Created December 10, 2016 02:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nariaki3551/4602e5a52b48bdceefa83d5b3310a1d3 to your computer and use it in GitHub Desktop.
Save nariaki3551/4602e5a52b48bdceefa83d5b3310a1d3 to your computer and use it in GitHub Desktop.
# ------------------------------------
# yukicoder
# No.458 異なる素数の和
# http://yukicoder.me/problems/no/458
# ------------------------------------
from math import sqrt, ceil
N = int(input())
def era_prime(N):
temp = [True for _ in range(N+1)]
temp[0] = temp[1] = False
key = ceil(sqrt(N+1))
for i in range(2, key):
if temp[i]:
for k in range(i+i, N+1, i):
temp[k] = False
primes = [index for index, is_prime in enumerate(temp) if is_prime]
return primes
primes = era_prime(N)
data = dict()
keys = list()
for prime in primes:
if prime > 480: break
new_keys = list()
for key in [x for x in keys if x+prime < N + 1][::-1]:
if key+prime not in data:
data[key+prime] = data[key] + 1
new_keys.append(key+prime)
else:
data[key+prime] = max(data[key+prime], data[key]+1)
if prime not in data:
data[prime] = 1
new_keys.append(prime)
keys += new_keys
if N in data:
print(data[N])
else:
print(-1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment