이번 문제는 N개의 수중에 소수인 수의 갯수를 찾는 것입니다.

소수의 범위가 크지 않기 때문에 사실 미리 소수를 구해도 되고, 에라토스테네스의 체를 이용해도 됩니다. 소수의 범위 K(이 문제에서는 1,000)라고 한다면, 에라토스테네스의 체를 사용하면
저는 에라토스테네스의 체가 아니라, 주어진 수마다 소수인지 판별을 했습니다. 이 경우
숫자의 범위가 크다면, 다른 접근 방법이 필요합니다. 밀러-라빈 소수 판정법을 비롯해서 다수의 소수 판정법이 있습니다. 그리고 큰 정수 자료구조를 사용해야 할 수도 있습니다. 큰 정수가 아니라면,
짝수 소수는 2 하나이므로 홀수에 대해서만 검사를 하도록 했습니다.
제가 작성한 소스입니다.
//------------------------------------------------
// baekjoon #1978
// - by Aubrey Choi
// - created at 2019-05-31
//------------------------------------------------
#include <stdio.h>
#include <memory.h>
bool isprime(int p)
{
if(p < 2) return false;
if(p == 2) return true;
if(p % 2 == 0) return false;
for(int s = 3; s*s <= p; s += 2)
if(p%s == 0) return false;
return true;
}
int main()
{
int n, count = 0, p;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &p);
if(isprime(p)) count++;
}
printf("%d\n", count);
}
반응형
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1987 알파벳(깊이 우선 탐색) (2) | 2023.01.12 |
---|---|
[C/C++] 백준 #1981 배열에서 이동(이분탐색) (0) | 2023.01.02 |
[C/C++] 백준 #1976 여행 가자(배타적 집합) (0) | 2022.12.20 |
[C/C++] 백준 #1966 프린터 큐(구현) (0) | 2022.12.14 |
[C/C++] 백준 #1965 상자넣기(가장 긴 증가하는 부분수열) (0) | 2022.12.10 |
댓글