소수를 만드는 가장 좋은 방법은 "에라스토테네스의 체"입니다. 한글 위키피디아 페이지에서 오른쪽 상단의 움직이는 이미지를 보면 충분히 이해할 수 있을 겁니다.
이런 내용을 파이썬 코드로 구현하면 이렇게 됩니다. n 이하의 모든 소수를 리스트로 만들어 주는 거죠.
로버트 윌리엄 행스(rwh)라는 사람이 stackoverflow에 올린 걸 가져온 겁니다. n이하 홀수들 중에서 체(seive)로 걸러지지 않는 것을 매우 효율적으로 찾아줍니다. 위의 url에 들어가 보면, 소수를 찾는 다른 방법들도 나와 있습니다. 각 알고리즘을 비교하는 표도 찾을 수 있고요. 저는 이 함수가 길이도 짧고, 의미하는 바도 간결하고, 실행 속도도 매우 빨라서 요즘에는 이것만 씁니다.
=====
이전에는 http://www.python-course.eu/list_comprehension.php 요기 페이지 마지막 예제로 나온 함수를 사용했었습니다. 위의 rwh_primes1보다 속도도 느리고, 무엇보다 버그가 있습니다. primes(50)을 찾아보면 49를 소수라고 판단하죠. 버그 고치라고 사이트 관리자에게 메일을 보낸 지 한참 되었는데 안 고치네요.
No comments:
Post a Comment