Math
3-12: 소수 찾기
SWC123
2018. 10. 24. 20:07
소수 찾기 (findprime.cpp)
문제
주어진 숫자들 중 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.
입력
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 줄에 걸쳐 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
출력
주어진 수들 중 소수의 개수를 출력한다.
예제 입력
4
1
3
5
7
예제 출력
3
import java.util.Scanner;
public class FindPrime {
/**
* 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 줄에 걸쳐 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
* 주어진 수들 중 소수의 개수를 출력한다.
*
* 4
* 1
* 3
* 5
* 7
*
* 3
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int nums[] = new int[N];
for (int i=0; i<N; i++){
nums[i] = sc.nextInt();
}
int isPrime[] = new int[1001];
isPrime[0] = -1;
isPrime[1] = -1;
isPrime[2] = 0;
for (int i=2; i<isPrime.length; i++){
//find lowest notPrimes
if (isPrime[i] == 0){
int source = i;
// System.out.println(source + " is next prime");
//mark all multiples of source to not prime
for (int j=source*source; j<isPrime.length; j+=source){
// System.out.println(j + " is not prime");
isPrime[j] = -1;
}
}
}
// for (int i=0; i< isPrime.length; i++){
// System.out.println("number " + i +" is prime? " + (isPrime[i]==0?"yes":"no"));
// }
int count=0;
for (int i=0; i<N; i++){
if (isPrime[nums[i]] == 0){
count++;
}
}
System.out.println(count);
}
}