본문 바로가기

PS/백준 문제

백준 4948번 파이썬 문제풀이

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

 

반응형