728x90
- 원래 구하던 소수 구하기
- 나누어 떨어지면 약수가 존재하므로 소수X
- 시간이 오래 걸려 효율성에서 실패할 확률 높음
def isprime(n):
for i in range(2,int(n**0.5)+1):
if n%i == 0:
return False
else:
return True
- 에라토스테네스의 체
- 가장 먼저 소수를 판별할 범위만큼 배열을 할당 후 이후에 하나씩 지워나가는 방법
- ex) 2의 배수 지우기, 3의 배수 지우기, 5의 배수 지우기....
- O(n**0.5)
- 가장 먼저 소수를 판별할 범위만큼 배열을 할당 후 이후에 하나씩 지워나가는 방법
def solution(n):
arr = [i for i in range(n+1)]
for i in range(2,int(n**0.5)+1):
if arr[i]:
j = 2
# i의 배수 지우기
while i*j <= n:
arr[i*j] = 0
j += 1
answer = []
for a in arr[2:]:
if a:
answer.append(a)
return answer
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[프로그래머스] 삼각 달팽이 - Python (0) | 2023.03.02 |
---|---|
[프로그래머스] 큰 수 만들기 - Python (0) | 2023.03.02 |
[230228] heapq (추가, 삭제, 리스트를 heap으로 변환) - Python (0) | 2023.02.28 |
[프로그래머스] 야근 지수 - Python (0) | 2023.02.28 |
[230228] n진법 구하기(with divmod) - Python (0) | 2023.02.28 |
댓글