백준 1929 - 소수 구하기

Updated:

Java

1929 번 - 소수 구하기

문제

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. (1 ≤ M ≤ N ≤ 1,000,000)

접근 방법

소수 구하는 문제이다.
n이라는 숫자가 있으면 2부터 n-1까지 탐색하여 n을 나눌 수 없으면 n은 소수이다.
하지만 위 방법은 시간초과를 초래하므로, n-1까지 대신 Root n 까지 반복하여 소수인지 판별한다.

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, m, result;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk = new StringTokenizer(br.readLine());
    	n = stoi(stk.nextToken());
    	m = stoi(stk.nextToken());
    	
    	StringBuilder sb = new StringBuilder();
    	boolean isPrime = true;
    	for(int i = n; i <= m; i++) {
    		if(i == 1)		// 1은 소수가 아니다
    			continue;
    		isPrime = true;
			// 2부터 root(i) 까지 수 중 나누어 떨어지지 않으면 소수이다.
    		for(int j = 2; j <= Math.sqrt(i); j++) {
    			if(i % j == 0) {
    				isPrime = false;
    				break;
    			}
    		}
    		if(isPrime)
    			sb.append(i).append("\n");
    	}
	}
}	

총평

후기

1은 소수가 아니다!!!!!

개선할 점

없습니다.