[BOJ][C++] 백준 1978번 소수 찾기

Updated:

1978 소수 찾기

1. 문제 정보

백준 온라인 저지 [1978번 소수 찾기] 문제의 링크입니다.

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력1

4  
1 3 5 7

예제 출력1

3

시간 / 메모리 제한

2초 / 128MB


2. 생각

  1. 단순하게 생각해서 소수는 1과 자기 자신을 제외한 수로 나눠지지 않으므로 i를 2부터 num보다 작을 때까지 증가시켜 num이 i로 나눠지는지 판단하려고 했습니다. flag를 두어 나눠지면 소수가 아닌 것으로 판단합니다.

  2. n으로 판단할 숫자를 입력받고 n번 들어온 각 숫자가 i로 나눠지는지 판단하고 소수가 아니면 카운트 변수의 값을 증가시키지 않습니다.

  3. 그렇게 하면 소수를 판별하는데에 O(n)의 시간이 걸리고 이 것을 n번 반복할 것입니다. n은 100이하의 자연수이고, 각 숫자는 1000이하의 자연수이므로 100*1000 = 100,000입니다. 시간제한 2초에 충분합니다. (대략 1억 = 1초)

+ 에라토스테네스의 체 방법을 사용할 수 있습니다.

소수 관련 알고리즘은 두 가지 있습니다.

  1. 주어진 소수가 소수인지 아닌지 판별하는 방법 (1978번 문제)
  2. 주어진 n보다 작거나 같은 모든 자연수 중에서 소수를 찾아내는 방법 (에라토스테네스의 체 방법)

3. 소스코드 (C++)


터미널의 입출력 화면 예제1

1978_1

터미널의 입출력 화면 다른 예제

1978_2 1978_3