소수 구하기 예제 - 1
문제 분석
숫자 사이에 소수를 출력하는 문제다.
N의 최대 범위가 1,000,000이므로 일반적인 소수 구하기 방식으로 문제를 풀면 시간 초과가 발생한다.일반적으로 소수를 찾을 때는 2 이상부터 자기 자신보다 작은 수로 나눴을 때 나머지가 0이 아닌 수를 찾는다.
에라토스테네스 방법으로 문제를 풀어야 한다.
손으로 풀어보기
크기가
N+1인 리스트를 선언한 후 값은 각각의 인덱스값으로 채운다. 소수 구하기에서 0번째 배열은 사용하지 않는다.1은 소수가 아니므로 삭제한다.

2부터
N의 제곱근까지 값을 탐색한다. 값이 인덱스값이면 그대로 두고(소수로 인정), 그 값의 배수를 탐색해 0으로 변경한다.

9도 변경
배열에 남아 있는 수 중
M이상N이하의 수를 모두 출력한다.

N의 제곱급까지만 탐색하는 이유
N의 제곱근이n일 때N = a * b를 만족하는 a와 b모두n보다 클 수는 없다. a가n보다 크다면 b는n보다 작아야 한다. 즉,N보다 작은 수 가운데 소수가 아닌 수는 항상n보다 작은 약수를 가진다. 따라서 에라토스테네스의 체로n이하의 수의 배수를 모두 제거하면 1부터N사이의 소수를 구할 수 있다.
슈도코드
코드 구현 - 파이썬
코드 구현 - 자바
Last updated