반응형
야나이 마사카즈의 "더 나은 프로그래밍을 위한 코드골프"라는 책을 읽다가,
'에라스토테네스의 체'라는 내용이 나와서 좀더 자세히 알아보게 되었다.
소수를 구하는 알고리즘인데,
1부터 n까지의 모든 소수를 구한다고 할 때
n까지 다 계산할 필요 없이
sqrt(n)까지만 계산하면 되는 방법이다.
무작정 n까지 다 계산하는 방법보다는 훨씬 나은 방법이다.
즉, 종이에 1부터 n까지 모두 써 놓고,
일단 1을 지운 다음,
2를 소수 리스트에 추가하고 종이에서 2의 배수를 모두 지운다.
다음 숫자들에 대해서도 2에 대한 과정을 반복하되,
이미 지운 숫자는 건너뛰고,
현재의 숫자의 제곱이 n보다 작을 때까지만 반복한다.
현재의 숫자의 제곱이 n보다 커지면,
종이에 남은 숫자를 모두 소수 리스트에 추가하면 된다.
현재의 숫자의 제곱이 n보다 커졌을 때 남은 숫자를
모두 소수 리스트에 추가할 수 있는 이유는 다음과 같다.
현재의 숫자를 i라고 할 때,
i보다 작은 수들의 배수는 이미 목록에서 지워졌고,
i 및 i보다 큰 수의 배수는 최소값이 i * i보다 커야 하는데 i * i가 n보다 크므로,
n이하의 남은 수들은 1과 자신 이외의 약수가 존재하지 않는다.
따라서, 모두 소수 리스트에 추가할 수 있다.
관련 블로그 및 기타
반응형
'기타' 카테고리의 다른 글
영어공부 채널 (0) | 2019.08.04 |
---|---|
티니안섬 (0) | 2019.08.03 |
검색엔진에서 GitHub 페이지 검색 가능하게 하기(링크) (0) | 2018.05.10 |
티스토리에 소스코드 보기좋게 표시하는 방법(링크) (0) | 2018.04.09 |
전세보증보험(전세보증금반환보증) 가입을 위한 필요서류 (0) | 2018.04.04 |