https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
관련 개념
이 문제는 에라토스테네스의 체 알고리즘을 사용하여 풀이하는 문제이다.
꼭 저 알고리즘을 사용하지 않아도 문제가 풀리긴 한다.
에라토스테네스의 체
- 소수를 판별하는 알고리즘
- 소수들을 대량으로 빠르고 정확하게 구하는 방법
에라토스테네스의 체 원리
- 가장 먼저 소수를 판별할 범위만큼 배열을 할당한 뒤에 해당하는 값을 넣어주고, 이후에 하나씩 지워나가는 방법
- 배열을 생성하여 초기화
- 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지우기
- 지울 때 자기자신은 지우지 않고, 이미 지워진 수는 건너뛰기
- 1은 소수가 아니므로 2부터 시작!
- 2부터 시작하여 남아있는 수를 모두 출력
코드
#include <iostream>
#define MAX 1001
int a[MAX];
int main() {
//1은 소수가 아니므로 따로 판별
a[1]++;
int n, tmp, result = 0;
scanf("%d", &n);
for(int i = 2; i < MAX; i++) {
for(int j = i + i; j < MAX; j += i) {
if(a[j] == 1)
continue;
else
a[j]++;
}
}
for(int i = 0; i < n; i++) {
scanf("%d", &tmp);
if(!a[tmp])
result++;
}
printf("%d", result);
return 0;
}
참고
에라토스테네스의 체 개념
코드
https://coding-maggot.tistory.com/112
'Algorithm > 백준' 카테고리의 다른 글
[Algorithm][파이썬] 백준 1789번: 수들의 합 (0) | 2023.05.02 |
---|---|
[Algorithm][파이썬] 백준 10816번: 숫자 카드 2 (0) | 2023.05.02 |
[Algorithm][파이썬] 백준 1920번: 수 찾기 (0) | 2023.04.11 |
[Algorithm][파이썬] 백준 2309번: 일곱 난쟁이 (0) | 2023.04.04 |
[Algorithm][파이썬] 백준 15650번: N과 M (2) (0) | 2023.04.04 |