import math
result = []
rng = 246912
lists = [True for _ in range(rng+1)]
lists[0]=False
lists[1]=False
for i in range(2, int(math.sqrt(rng))+1):
if lists[i] == True:
j = 2
while i*j <= rng:
lists[i*j] = False
j +=1
while(1):
n = int(input())
if n==0: break
count = 0
for i in range(n+1,2*n+1):
if lists[i] == True:
count+=1
print(count)
에라토스네스의 체를 사용했다.
123,456의 2배인 246912 만큼의 소수를 찾고 n을 입력받을 때마다 (n+1,2*n) 범위 안에 있는 소수를 구했다.
소수 알고리즘
소수(prime number)란 2보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수이다. 코딩테스트에서 숫자가 소수인지 판별하는 경우가 간혹 생기므로 정리해본다.
dongcoding.tistory.com
반응형
'PS > 백준 문제' 카테고리의 다른 글
백준 18310번 파이썬 문제풀이 (0) | 2021.10.30 |
---|---|
백준 1929번 파이썬 문제풀이 (0) | 2021.10.30 |
백준 2581번 파이썬 문제풀이 (0) | 2021.10.30 |
백준 2775번파이썬 문제풀이 (0) | 2021.10.27 |
백준 1316번 파이썬 문제풀이 (0) | 2021.10.09 |