문제설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
n은 2이상 1000000이하의 자연수입니다
1부터 10 사이의 소수는 [2,3,5,7] 이므로 4를 리턴
생각하기
- 입력값 n에 대해 집합을 만든다
- 2부터 n+1까지 검색
- i 가 sosu집합에 있다면 i의 배수를 제거
- 남은 sosu집합의 개수가 정답
내 코드
def solution(n):
sosu = set(range(2,n+1))
for i in range(2, n+1):
if i in sosu:
sosu -= set(range(i*2, n+1, i))
return len(sosu)
코드 해석
- sosu = set(range(2,n+1)) -- range로 2부터 n+1까지 집합을 만들어준다.
- for i in range(2, n+1): -- 2부터 n+1 까지 탐색을한다.
- if i in sosu: -- 소수집합 안에 i가 있다면
- sosu -= set(range(i*2,n+1,i)) -- ex)n=2 -- 4부터 끝까지 2씩 늘려가며... 집합을 만들고 sosu 집합에서 2의 배수 집합을 삭제
- return len(sosu) --- 검색을 마친 sosu는 소수들의 집합이므로 sosu의 개수가 정답