문제이해
n과 2n 사이에는 적어도 소수 하나는 존재합니다.
즉, 소수를 구하는 모듈이 있다면 n과 2n사이에 서 나온 소수들의 수만 구하면 됩니다.
n < 소수 <= 2n
코드
#소수를 구하는 함수
def prime_num(m,n):
count = 0
a = [False, False] + [True] * (n-1)
#에라토스테네스의 체로 리스트a를 조정한다.
for i in range(2, n+1):
if(a[i]):
for j in range(i*2, n +1, i):
a[j] = False
#리스트a가 True일 때 인덱스를 출력
for i in range(m+1, n+1):
if(a[i]):
count += 1
return count
while(True):
test_case = int(input())
#0을 입력하면 종료
if(test_case == 0):
break
count = 0
count = prime_num(test_case, (test_case*2))
print(count)
while문으로 계속 입력을 받습니다.
0을 입력하면 종료가 되죠
prime_num(시작 수, 마지막 수)메서드는 2개의 매개변수를 갖습니다.
시작점과 끝점을 매개변수로 가져와서 에라토스테네스의 체로 소수를 판별합니다.
주의할 점
n과 2n사이의 소수를 찾는데
n < 소수 <= 2n 를 구해야 해서
에라토스테네스의 체로 걸러진 소수만 있는 리스트를 훑을 때
시작점 +1 에서 시작합니다.
728x90
'알고리즘 > 백준알고리즘' 카테고리의 다른 글
[백준 알고리즘/Python3] 1085 직사각형에서 탈출 (0) | 2021.12.05 |
---|---|
[백준 알고리즘/Python3] 9020 골드바흐의 추측 (0) | 2021.12.03 |
[백준 알고리즘/Python3] 1929 에라토스테네스의 체 (0) | 2021.10.31 |
[백준 알고리즘/Python3] 11653 소인수분해 (0) | 2021.10.28 |
[백준 알고리즘/Python3] 2581 소수 (0) | 2021.10.03 |