문제📖
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2Fa68c02e8-6282-4668-a4c7-9102df494686%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-05-25%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.03.12.png)
풀이🙏
- 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)
- 첫째 줄에 자연수 N을 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 출력한다.
코드💻
N = int(input())
def eratos(n):
sieve = [1] * (n + 1)
for i in range(2, int(n ** 0.5) + 1):
if sieve[i]:
for j in range(i * 2, n + 1, i):
sieve[j] = 0
return [i for i in range(2, n + 1) if sieve[i]]
def solution():
primes = eratos(N)
if not primes:
return 0
answer = 0
head, tail = 0, 0
acc = primes[0]
while head <= tail:
if acc < N:
tail += 1
if tail < len(primes):
acc += primes[tail]
else:
break
else:
if acc == N:
answer += 1
acc -= primes[head]
head += 1
return answer
print(solution())
결과😎
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F7058a758-e3c8-4784-8c1a-119f0fd47da7%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-05-25%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.16.49.png)
출처 && 깃허브📝
https://www.acmicpc.net/problem/1644
github