[백준][C++] 1929번: 소수 구하기
1929번: 소수 구하기
- 백준(boj) 1929번
- [백준][python] 1929번: 소수 구하기 - 파이썬 풀이
문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력 조건
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다.
(1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
출력 조건
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
첫 번째 시도 .
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int m, n;
cin >> m >> n;
bool isPrime = true;
for(int x = m; x <= n; x++){
isPrime = true;
if(x == 1){continue;}
else if(x == 2){
cout << 2 << endl;
continue;
}
double checkNum = pow( x, 0.5) + 1;
for (int i = 0; i < checkNum; i++){
if(x % i == 0){
isPrime = false;
break;
}
}
if (isPrime){
cout << x << "\n";
}
}
}
»intput
3 16
»output
3
5
7
11
13
success
🌝 Thinking
double checkNum = pow( x, 0.5) + 1;
for (int i = 0; i < checkNum; i++){}
이 부분에서 checkNum이라는 변수를 따로 만들지 않으면
for 구문이 순회할 때마다, cmath라이브러리에서 pow함수를 불러와야 하여 시간 초과를 야기할 수 있다.
따라서 CheckNum변수를 만들어 함수의 호출횟수를 줄여주었다.
( 파이썬에서는 **0.5 연산을 통하여 for구문에서 바로 선언을 하였지만 Cpp에서는 제곱근을 함수를 호출하여, 처리를 해주어야 한다. 따라서 함수를 호출에 반복문안에 포함되지 않도록 신경을 써주면 시간 초과문제를 피할 수 있었다.)
💡 깨달은 점.
소수찾기에서 숫자를 조사하는 과정에서 N = 1과 2는 예외사항으로 두어야한다는 점을 명심하자.
댓글남기기