acmicpc.net/problem/1978
시간 1초, 메모리 128MB
input :
output :
입력되어 오는 숫자의 최대가 1000이다.
길이가 1001 인 리스트를 만들어서 소수로 분류 해두고.
입력받은 N개의 수를 인덱스처럼 찾아오게 하자.
소수를 찾는 방법.
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
- 2는 소수이므로 오른쪽에 2를 쓴다. / 2의 배수를 모두 지운다.
- 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. / 2의 배수를 모두 지운다.
- 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. / 5의 배수를 모두 지운다.
- 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. / 7의 배수를 모두 지운다.
- 위의 과정을 반복
그냥 while 문 두개 써가지고 반복했다.
import sys
n = int(sys.stdin.readline())
data = list(map(int, sys.stdin.readline().split()))
prime_num = [True] * 1001
prime_num[1] = False
i = 2
while i <= 1000:
cnt = i + i
while cnt <= 1000:
prime_num[cnt] = False
cnt += i
i += 1
ret = 0
for item in data:
if prime_num[item]:
ret += 1
print(ret)