곽로그

[백준 1929, Java] 소수구하기 본문

알고리즘/백준

[백준 1929, Java] 소수구하기

일도이동 2020. 11. 2. 14:12
반응형

문제

www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

 

check

1. 어렵게 보인다, 복잡해 보인다 라는 생각이 들면 어짜피 못풀거다 라는 생각에 생각하기를 멈춘다. 따지고 보면 그렇게 어려운게 아닌데 지레짐작해서 포기해버린다. 

 

2. 예전 코드를 보니 '소수는 귀찮다'라는 생각에 풀다 안 푼 흔적이 있다. 

3. 막상 해보면 별거 아니다. 

 

소스코드

package november.first;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class EratosDemo {
    public static boolean[] isPrime ;
    public static void main(String[] args) throws  Exception{
        BufferedReader br  = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw =  new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int minNum = Integer.parseInt(st.nextToken());
        int maxNum = Integer.parseInt(st.nextToken());

        isPrime = new boolean[maxNum+1];
        Arrays.fill(isPrime, true);
        isPrime[0] =false;
        isPrime[1] = false;
        eratos(maxNum);

        for(int num = minNum ; num <= maxNum ; num++){
            if(isPrime[num]) bw.write(String.valueOf(num)+"\n");
        }
        bw.flush();

        br.close();
        bw.close();


    }
    public static void eratos(int maxNum){
        for(int num =2 ; num <= maxNum; num++){
            if(isPrime[num]){
                //num * n = x 에서 n 기준
                for(int n = 2; num*n<=maxNum ; n++){
                    if(isPrime[num*n]) isPrime[num*n] = false;
                }
            }
        }
    }

    public static void eratos2(int maxNum){
        for(int num = 2; num <= maxNum; num++){
            if(isPrime[num]){

                //num * n = x 에서 x기준
                for(int x = num*num ; x<=maxNum; x+=num){
                    isPrime[x] =false;
                }
            }
        }
    }
}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 6588, Java] 골드바흐의 추측  (0) 2020.11.02
[백준 1987, Java] 소수찾기  (0) 2020.11.02
[백준 17298, Java] 오큰수  (0) 2020.10.31
[백준 10799, Java] 쇠막대기  (0) 2020.10.28
[백준 17413, Java] 단어 뒤집기2  (0) 2020.10.28
Comments