풀이방법
사용된 것:
수학
에라토스테네스의 체
2022.04.17
에라토스테네스의 체의 방식으로 1부터 1000까지의 모든 소수를 구해둔 다음,
구해둔 소수 목록을 이용하여 입력으로 주어지는 수들이 소수인지를 판별하면 된다.
코드
Java(2022.04.17)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//2부터 1000까지의 소수를 모두 구해놓기
int[] primes = new int[1001];
//모든 값을 1로 초기화한 후, 소수가 아닌 수의 인덱스에 저장된 값을 0으로 변경할 것
Arrays.fill(primes, 1);
primes[0] = 0;
primes[1] = 0; //0과 1은 소수가 아니므로 값을 0으로 지정
//2부터 1000까지의 모든 수에 대하여
for(int i = 2; i<1001; i++) {
//i가 이미 소수가 아닌 것으로 판별난 수라면
//이 수와 이 수의 배수들도 모두 판별이 끝났으므로 continue
if(primes[i] == 0) continue;
//i가 소수라면
//이 수의 모든 배수들에 대하여 저장된 값을 0으로 변경
for(int j = 2; i*j<1001; j++) {
primes[i*j] = 0;
}
}
//입력값 받아오기
int n = Integer.parseInt(br.readLine());
int cnt = 0;
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i<n; i++) {
int temp = Integer.parseInt(st.nextToken());
if(primes[temp] == 1)cnt++;
}
//정답 출력
System.out.print(cnt);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#2798 : 블랙잭 (0) | 2022.04.17 |
---|---|
#2164 : 카드2 (0) | 2022.04.17 |
#2609 : 최대공약수와 최소공배수 (0) | 2022.04.17 |
#2930 : 가위 바위 보 (0) | 2022.04.16 |
#4673 : 셀프 넘버 (0) | 2022.04.16 |