몽상실현개발주의

[종만북] 에라토스테네스의 체 / 정수론 / Python 파이썬 본문

Language/Algorithm

[종만북] 에라토스테네스의 체 / 정수론 / Python 파이썬

migrationArc 2021. 9. 22. 15:23

[종만북] 에라토스테네스의 체 / 정수론 / Python 파이썬

[종만북] 에라토스테네스의 체 / 정수론 / Python 파이썬

N 까지의 모든 소수를 구하는 방법이다.

 

소수 판별을 위하여 (N ^ 0.5) 까지의 모든 수로 나눠보대신, (N ^ 0.5) 까지 순회하며 소수를 찾을 때마다 그 배수들을 지우는 형태로동작하기 때문에 훨씬 빠르게 수행된다.

 

 

최적화

  • N 이 아니라 (N ^ 0.5) 까지만 순회.
  • i 의 배수들을 모두 지울 때 2xi 에서 시작하는 것 이 아니라 (i X i) 에서 시작 / 2Xi, 3Xi 는 2 와 3의 배수를 지울때 삭제되기 때문

 

# 에라토스테네스의 체

def eratosthenes(N):
    nums = [1] * (N+1)

    nums[0] = 0
    nums[1] = 0

    sqrtn = int(N ** 0.5)

    for i in range(sqrtn+1):
        if nums[i]:
            # ( i+i = 2 * i ) 는 2의 배수를 지울 때, 3*i 는 3의 배수를 지울때 지워졌을 것이므로,
            # i * i 부터 탐색
            for j in range(i*i, N+1, i):
                nums[j] = 0
    return nums


print(eratosthenes(10))
Comments