Post

에라토스테네스의 체

에라토스테네스의 체

1부터 n까지의 수들을 소수판별하는 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
n = int(input())

check = [False, False] + [True]*(n-1) 
prime = []

for i in range(2,n+1):
    if check[i]:
        prime.append(i)
        for j in range(i+1,n+1):
            if j%i == 0:
                check[j] = False

print(prime)

i가 2일 때, 2의 배수들을 전부 False로 만들어준다. 그리고 2를 소수로 넣는다.
i가 3일 때, 3의 배수들을 전부 False로 만들어준다. 그리고 3을 소수로 넣는다.
i가 4일 때는 check[4]가 False이기 때문에 if문 성립 x
이를 i가 n일 때까지 반복하면 prime 리스트에는 소수가 담기게 된다.

<2024-01-19(수정)>
하지만 위의 코드는 if j%i == 0:이 연산을 range(i+1,n+1)만큼 계속 반복하므로 비효율적이다. 그냥 i만큼을 계속 더해주면서 False 처리를 해주는 것이 더 효율적이다.

1
2
3
4
5
6
7
8
9
10
11
12
n = int(input())

check = [False, False] + [True]*(n-1)
prime = []

for i in range(2,n+1):
    if check[i]:
        prime.append(i)
        for j in range(i*2,n+1,i):
            check[j] = False

print(prime)
This post is licensed under CC BY 4.0 by the author.