IT/알고리즘

백준 1929 소수구하기

어센트 2020. 2. 29. 21:08

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)

www.acmicpc.net

 

 원래 소수를 구하는 방식으로는 시간초과가 나서 에라토스테네스의 체 의 방식을 이용해야 시간초과 없이 문제를 해결 할 수 있었다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package 수학2;
import java.io.*;
public class 소수_구하기 {
    public static boolean[] primeNum;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String [] in  =br.readLine().split(" ");
        int m = Integer.parseInt(in[0]);
        int n = Integer.parseInt(in[1]);
        primeNum = new boolean[n+1];
        getPrimeNum();
        for(int i=m;i<=n;i++){
            if(!primeNum[i]){
               sb.append(i).append("\n");
            }
        }
        System.out.println(sb);
        br.close();
    }
    private static void getPrimeNum() { //에라토스테네스의 체
        primeNum[1= true;
        for(int i=2;i<primeNum.length;i++)
            for (int j = 2; i*<primeNum.length ; j++) {
                primeNum[i*j] = true;
            }
    }
 
}
 
cs

기존에 해결하려고 했던 방식

 

 

1
2
3
4
5
6
7
    static boolean chkPrime(int num){
        if(num <=1) return false;
        for (int i = 2; i < num ; i++) {
            if(num%i==0) return false;
        }
        return true;
    }
cs