BOJ 1978 소수 찾기

LONGNEW·2021년 1월 12일
0

BOJ

목록 보기
28/333

acmicpc.net/problem/1978
시간 1초, 메모리 128MB
input :

  • 수의 개수 N(1 <= N <= 100)
  • N개의 수 (1 <= 수 <= 1000)

output :

  • 소수의 개수 출력.

입력되어 오는 숫자의 최대가 1000이다.
길이가 1001 인 리스트를 만들어서 소수로 분류 해두고.
입력받은 N개의 수를 인덱스처럼 찾아오게 하자.

에라토스테네스의 체.

소수를 찾는 방법.

  1. 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다.
  2. 2는 소수이므로 오른쪽에 2를 쓴다. / 2의 배수를 모두 지운다.
  3. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. / 2의 배수를 모두 지운다.
  4. 남아있는 수 가운데 5는 소수이므로 오른쪽에 5를 쓴다. / 5의 배수를 모두 지운다.
  5. 남아있는 수 가운데 7은 소수이므로 오른쪽에 7을 쓴다. / 7의 배수를 모두 지운다.
  6. 위의 과정을 반복

그냥 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)

0개의 댓글