문제📖
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2Ff44fdd05-2f3f-461a-ad82-c766871744e5%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-06-11%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.47.55.png)
풀이🙏
- 입력은 여러 개의 케이스로 이루어져 있다.
- 각 케이스는 n을 포함하는 한 줄로 이루어져 있다.
- 입력의 마지막에는 0이 주어진다.
- 각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다.
-> 에라토스테네스의 체
+ 제너레이터 표현식
으로 구현하였다.
코드💻
import sys
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 sum([1 for i in range(2, n + 1) if sieve[i] and i > n/2])
def solve(n):
return eratos(2*n)
while True:
n = int(sys.stdin.readline())
if n == 0:
break
print(solve(n))
결과😎
![](https://velog.velcdn.com/images%2Fcosmos%2Fpost%2F1998b9f3-0803-4f23-8e78-e23d741c3abd%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-06-11%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.58.20.png)
출처 && 깃허브📝
https://www.acmicpc.net/problem/4948
github