반응형
문제
주어진 수 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 |
댓글