소수란 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수
이다. 보통은 2부터 N-1(자신-1)까지 돌며 나누어 떨어지는 수가 있는지 확인한다.
어떤 수의 약수는 그 수의 제곱근을 기준으로 곱셈 연산에 대해 대칭을 이룬다. 이런 성질로 인해 어떤 수의 2부터 제곱근까지
만 나누어 떨어지는 수가 있는지 확인하면 된다.
에라토스테네스의 체(Sieve of Eratosthenes)는 N보다 작거나 같은 모든 소수를 찾을 때 사용하는 알고리즘이다.
import math
a=int(input()) # a보다 작거나 같은 소수를 구할 것임
answer=[]
check=[True for i in range(a + 1)]
for i in range(2,int(math.sqrt(a))+1): # 2부터 입력받은 수의 제곱근 까지 모두 확인
if check[i] == False: continue # 확인하는 값이 이미 제거되었으면 스킵
for j in range(i+i,a+1,i): # 확인하고자 하는 배수에 해당하는 값을 False
check[j]=False
# 위에 for문이 끝나면, 소수가 아닌 곳에는 False 체크가 되어 있고
# 소수인 숫자들에는 True 가 남아 있다.
for i in range(2,a+1):
if check[i]==True:
print(i,end=' ')
O(nlog(logn))
이다.