본문 바로가기

IT/Python

[프로그래머스] Lv.1 소수 찾기 [Python]

728x90

 

 

1~n 사이의 소수 개수 구하기

 

더보기

문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.

소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
$($1은 소수가 아닙니다.$)$

제한 조건
    n은 2이상 1000000이하의 자연수입니다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/12921

 

에라토스테네스의 체를 이용해서 풀었습니다.

소수의 배수를 제거함으로써 소수만 남기는 방법

n의 제곱근 까지만 위 방법으로 체로 거르면 n까지의 소수를 모두 구할 수 있습니다.

def solution(n):
    s = [0, 0] + [1] * (n-1) 
    for i in range(2, int(n**.5)+1):
        if s[i]:
            for j in range(i**2, n+1, i):
                s[j] = 0
    return sum(s)

 

이 문제를 응용하면 아래 백준 소수 구하기 문제를 쉽게 풀 수 있습니다.

[백준] 1929번 소수 구하기 [Python] (tistory.com)

 

더보기

입출력 예

n result
10 4
5 3


입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환

입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환