M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
#include <iostream>
using namespace std;
/* 함수 */
// 3 이상의 홀수 num에 대하여 소수인지 판별
bool isPrimeNum(int num) {
for(int i = 3; i * i <= num; i += 2) { // √num 까지만 확인
if(num % i == 0) return false; // 소수가 아닌 경우 false 반환
}
return true; // 소수인 경우 true 반환
}
int main() {
int M, N;
scanf("%d%d", &M, &N);
if(M == 1) M++;
if(M == 2 && N > 1) {
printf("%d\n", 2);
M += 1;
}
if(M % 2 == 0) M++;
for (int i = M; i <= N; i += 2) {
if(isPrimeNum(i)) printf("%d\n", i);
}
}
이전에 풀었던 문제와 비슷한 문제여서 소수를 찾는 함수를 가져다 사용했다.
예외인 M == 1 또는 2 일때, M이 짝수일 때를 미리 걸러줬고, M부터 N까지 1씩 증가해 소수인지 판별해 출력해줬다.