본문 바로가기
코테 문제

[백준] 1978번: 소수 찾기

by 케찹이 2021. 1. 12.
반응형

문제

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

입력

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

출력

주어진 수들 중 소수의 개수를 출력한다.

예제 입력 1 복사

4 1 3 5 7

예제 출력 1 복사

3

 

#include<iostream>
#include<cmath>

int main()
{
	int N;
	std::cin >> N;
	
	int* num = new int[N];
	for(int i=0; i < N; i++)
	{
		std::cin >> num[i];
	}
	
	int prime_num = 0;
	bool im_not_prime = 0;
	for(int i = 0; i < N; i++)
	{
		if(num[i] == 1)
		{
			continue;
		}
		
		if(num[i] % 2 ==0)
		{
			if(num[i] == 2)
			{
				prime_num++;
				continue;
			}
			else{
				continue;
			}
		}
		
		for(int j = 3; j <= sqrt(num[i]); j+=2)
		{
			if(num[i] % j == 0)
			{
				im_not_prime = 1;
				break;
			}
		}
		if(im_not_prime == 1)
		{
			im_not_prime = 0;
			continue;;
		}
		prime_num++;
	}
	
	std::cout << prime_num << std::endl;
	return 0;
}

알고리즘은 주어진 숫자에다가 3부터 그 숫자의 루트를 씌운 값까지 나눠 나머지가 있다면 소수다 라는 아이디어로 풀수 있습니다. 난이도가 실버4인데 소수문제는 너무 많이 접해봐서 체감상 브론즈 4~3느낌입니다. 

반응형

'코테 문제' 카테고리의 다른 글

[백준] 11653번: 소인수분해  (0) 2021.01.12
[백준] 2581번 소수  (0) 2021.01.12
[백준] 10757번: 큰 수 A+B  (0) 2021.01.08
[백준] 10250번: ACM 호텔  (0) 2021.01.06
[백준] 2869번: 달팽이는 올라가고 싶다.  (0) 2021.01.06

댓글