Gemstone's Devlog

[백준] 1644번: 소수의 연속합 (에라토스테네스의 체, 투 포인터) 본문

Data Structure & Algorithms

[백준] 1644번: 소수의 연속합 (에라토스테네스의 체, 투 포인터)

Gemstone 2022. 4. 15. 01:38

https://www.acmicpc.net/problem/1644

 

1644번: 소수의 연속합

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000)

www.acmicpc.net

이 문제는 에라토스테네스의 체 + 투 포인터 문제이다!

전에 풀었던 문제들의 알고리즘 두 개를 섞어 놓은 문제라 신기했다.

급하게 풀어서 코드가 깔끔하지는 않지만 통과하였기 때문에 일단 코드를 올려보겠다.

 

파이썬 풀이

import math
n = int(input())
arr = [False, False] + [True for i in range(n-1)]
for i in range(2, int(math.sqrt(n)+1)):
    if arr[i]:
        for k in range(i + i, n+1, i):
            arr[k] = False
prime_list = []
for i in range(len(arr)):
    if arr[i]:
        prime_list.append(i)
cnt = 0
interval_sum = 0
end = 0
for start in range(len(prime_list)):
    while interval_sum < n and end < len(prime_list):
        interval_sum += prime_list[end]
        end += 1
    if interval_sum == n:
        cnt += 1
    interval_sum -= prime_list[start]

print(cnt)