[코딩테스트] 소수(에라토스테네스 체)

LeeEunJae·2022년 10월 9일
0

코딩테스트

목록 보기
3/4

📌 에라토스테네스 체?

수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다.

  1. 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
  2. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색)
  3. 자기 자신을 제외한 2의 배수를 모두 지운다.
  4. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초록색)
  5. 자신을 제외한 3의 배수를 모두 지운다.
  6. 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. (파란색)
  7. 자기 자신을 제외한 5의 배수를 모두 지운다.
  8. 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. (노란색)
  9. 자기 자신을 제외한 7의 배수를 모두 지운다.
  10. 위의 과정을 반복하면 구하는 구간의 모든 소수가 남는다.

글로 이해하기 보다는 아래의 영상을 보면 이해가 될 것 이라고 생각한다.

출처: https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4

📌 문제

📌Solution

제한시간이 1초이므로 에라토스테네스 체 방법을 사용해서 문제를 해결해야한다.
에라토스테네스 체 방법으로 소수를 구하는 것을 코드로 구현하면 다음과 같다.

import sys
sys.stdin = open("input.txt","rt")

n = int(input())
ch=[0]*(n+1)
cnt=0

for i in range(2,n+1):
    if ch[i]==0:
        cnt+=1
        for j in range(i, n+1, i):
            ch[j]=1
print(cnt)
profile
매일 조금씩이라도 성장하자

0개의 댓글