def getPrimes(last) :
#True is Prime, False is Composite
data = [True] * last
data[0] = data[1] = False
for i in range(2, int(math.sqrt(last)) + 1) :
if data[i] == False : continue
for j in range(2 * i, last, i) :
data[j] = False
#List consists of primes
primes = []
for i in range(last) :
if data[i] : primes.append(i)
return primes
[1, 25] 사이의 소수 구하기
모든 수를 소수라고 가정하여 True로 할당
[TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE]
1은 먼저 소수가 아닌 수로 처리
[FALSE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, TRUE]
2는 소수(True)이므로, 2를 제외한 2의 배수는 소수가 아님(False)
[FALSE, TRUE, TRUE, FALSE, TRUE,
FALSE, TRUE, FALSE, TRUE, FALSE,
TRUE, FALSE, TRUE, FALSE, TRUE,
FALSE, TRUE, FALSE, TRUE, FALSE,
TRUE, FALSE, TRUE, FALSE, TRUE]
3도 소수(True)이므로, 3을 제외한 3의 배수는 소수가 아님(False)
[FALSE, TRUE, TRUE, FALSE, TRUE,
FALSE, TRUE, FALSE, FALSE, FALSE,
TRUE, FALSE, TRUE, FALSE, FALSE,
FALSE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE, TRUE, FALSE, TRUE]
4는 이미 소수가 아니므로(False), 4의 배수는 이미 소수가 아닌 수로 되어 있음
5는 소수 이므로, 5를 제외한 5의 배수는 소수가 아님
[FALSE, TRUE, TRUE, FALSE, TRUE,
FALSE, TRUE, FALSE, FALSE, FALSE,
TRUE, FALSE, TRUE, FALSE, FALSE,
FALSE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE, TRUE, FALSE, FALSE]
25의 제곱수가 5이므로, 6부터는 소수가 아닌 수가 모두 걸러져있음.
결과로, 소수인 수는
2, 3, 5, 7, 11, 13, 17, 19, 23