문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(1은 소수가 아닙니다.)
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
n | result |
10 | 4 |
5 | 3 |
def solution(n):
answer = 1 # 2는 for문에 포함되지 않지만 소수이므로 answer이 1로 시작
for i in range(3,n+1,2): # 소수= 1과 자기 자신으로만 나누어 떨어짐
for j in range(2,i): # i라는 수를 2부터 i-1까지 나눴을 때,
if i % j == 0: # 나누어 떨어지는 수가 있다면 소수가 아님
break
elif j == i-1: # 나누어 떨어지는 수가 없다면
answer += 1 # 소수이므로 answer에 +1
return answer
- 시간초과
- 비효율의 끝판왕인가봐요
def solution(n):
numbers = list(range(3,n+1,2)) # n까지의 홀수
for i in range(2,n+1): #에라토스테네스의 체 이용
if i in numbers:
for j in range(2*i, n+1, i):
if j in numbers:
numbers.remove(j)
return len(numbers)+1 # 소수 2 포함
- 나름 에라토스테네스의 체 이용해봤는데도 시간초과!
def solution(n):
numbers = set(range(3,n+1,2)) # n까지의 홀수집합
for i in range(3,n+1,2): #에라토스테네스의 체 이용
if i in numbers:
numbers -= set(j for j in range(2*i, n+1, i))
return len(numbers) + 1 # 소수 2 포함
- 점수 +12
Uploaded by Notion2Tistory v1.1.0