문제
주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력 1
4
1 3 5 7
예제 출력 1 복사
3
제출 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int max = 0;
int [] nums = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
int curt = Integer.parseInt(st.nextToken());
nums[i] = curt;
if(max<curt){
max = curt;
}
}
int[] primes = new int[max+1];
primes[0] = 1;
primes[1] = 1;
primes[2] = 0;
int index = 2;
while(Math.pow(index,2 ) <= max){
if(primes[index] == 0){
int pow = 2;
while(index * pow <=max){
primes[index * pow] = 1;
pow++;
}
}
index++;
}
int result = 0;
for (int num: nums ) {
if(primes[num] == 0) result++;
}
System.out.println(result);
}
}
에라토스테네스의 체를 사용해서 풀이했다.
'Study > Algorithms' 카테고리의 다른 글
백준 2798 블랙잭 (Java) Next Permutation 활용 풀이 (0) | 2023.08.27 |
---|---|
백준 1929 소수 구하기 (JAVA) (1) | 2023.08.27 |
백준 2751 수 정렬하기 2 (JAVA) (0) | 2023.08.26 |
백준 2609 최대공약수와 최소공배수 (0) | 2023.08.26 |
백준 1920 수 찾기(JAVA) (0) | 2023.08.26 |