문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제
입력 | 출력 |
4 1 3 5 7 |
3 |
알고리즘
제곱근 반복문으로도 풀리지만 나는 에라토스테네스의 체 알고리즘을 사용하여 해결하였다.
코드
import java.util.*;
public class Main {
public static boolean[] prime = new boolean[1001];
public static void IsPrime() {
prime[0] = prime[1] = true;
for (int i = 2; i < Math.sqrt(prime.length); i++) {
if (prime[i] == true) continue;
for (int j = i * i; j < prime.length; j += i) {
prime[j] = true;
}
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt(); int num = 0;
IsPrime();
for (int i = 0; i < N; i++) {
if (prime[in.nextInt()] == false) num++;
}
System.out.print(num);
}
}
주어지는 수의 최대값은 1000이므로 boolean 배열의 크기를 1001로 지정해서 주었다.
이 문제 같은 경우 소수이면 개수를 +1 해야 하므로 조건을 if(prime[in.nextInt()] == false) 이렇게 주었다.
'PS > 백준' 카테고리의 다른 글
[JAVA] 11653번 소인수분해 (0) | 2024.01.30 |
---|---|
[JAVA] 9020번 골드바흐의 추측 (2) | 2024.01.30 |
[JAVA] 2609번 최대공약수와 최소공배수 (0) | 2024.01.30 |
[JAVA] 4948번 베르트랑 공준 (2) | 2024.01.30 |
[JAVA] 1929번 소수 구하기 (0) | 2024.01.29 |