n = int(input())
cnt = 0
for x in range(2, n+1):
for i in range(2, x): # range(2, 2)일때는 빈 범위 생성 -> for문 안이 실행되지x
if x % i == 0:
break
else:
cnt += 1
print(cnt)
다음과 같이 n까지의 범위를 두고 찾아도 되지만 비효율적이다.
그러므로 무조건 한쪽은 n의 0.5승 이하.
따라서 n**0.5까지의 범위를 두고 나눠지는지 확인하면 더 효율적이다.
for x in range(2, n+1):
for i in range(2, int(x**0.5)+1): # range(2, 2)일때는 빈 범위 생성 -> for문 안이 실행되지x
if x % i == 0:
break
else:
cnt += 1
print(cnt)
하지만 위와 같은 방법은 n이 소수인지 확인할 때 적합하고
n 이하의 소수를 구하려면 오래걸림
에라토스테네스 체 : n 이하의 소수를 구할 때 가장 빠르게 구할 수 있는 방법
n = int(input())
cnt = 0
che = [0] * (n+1) // 1. 배열 만들고 초기화
for i in range(2, n+1):
if che[i] == 0: // 2. 값이 0이면 소수
cnt += 1
for j in range(i, n+1, i): // 3. i의 배수는 값을 1로 바꿔주기(쳐내기)
che[j] = 1
else:
continue
print(cnt)