https://www.acmicpc.net/problem/1929
문제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
풀이 과정
바로 전에 풀었던 문제와 똑같은 문제인 것 같다.
이전 문제에서 풀었던 방법과 같은 방법을 사용하였다.
2부터 루트n까지 n을 나눠보고, 나누어떨어지는 경우가 있다면 n은 소수가 아니다.
import java.io.*;
import java.util.StringTokenizer;
public class Main{
// 소수 판별 메서드
public static boolean isPrime( int M ){
// 1은 소수가 아니므로 false
if( M == 1 ) return false;
for( int i = 2; i * i <= M; i++ ){
// 나누어 떨어진다면 소수가 아님
if( M % i == 0 )
return false;
}
return true;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int M = Integer.parseInt(st.nextToken()), N = Integer.parseInt(st.nextToken());
while( N >= M ){
if( isPrime(M) )
sb.append(M).append("\n");
M++;
}
System.out.println(sb);
}
}
출력 조건은 M부터 N 사이에 있는 소수를 출력하는 것이다. 먼저 M에 대해서 소수인지 아닌지 판별한다. 만약 소수가 맞다면 출력한다. 이 과정을 M에 1씩 더하여 N까지 반복한다.