ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boj)1929 - 소수 구하기
    PS/boj 2020. 9. 15. 18:58
    import java.io.*;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    
    // # 소수 구하기
    public class boj_1929 {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
        public static void main(String[] args) throws IOException {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int m = Integer.parseInt(st.nextToken());
            int n = Integer.parseInt(st.nextToken());
    
            boolean[] prime = new boolean[n+1];
    
            for (int i = 2; i <= n; i++) {
                prime[i] = true;
            }
    
            for (int i = 2; i*i <= n; i++) {
                for (int j = i*2; j <= n; j+=i) {
                    prime[j] = false;
                }
            }
    
            for (int i = m; i <= n ; i++) {
                if (prime[i]) bw.write(i + "\n");
            }
    
            bw.flush();
            bw.close();
        }
    }
    

    - n의 최댓값이 1,000,000 이니까 시간 복잡도 생각 필요

    - 에라토스테네스의 체 알고리즘 사용

     

    - n까지 수를 늘어놓을수 있는 prime[]

    - prime 배열에 2부터 n까지는 소수 가능성이 있으니 true

    - 처음 for 문에서는 굳이 n까지 안돌고 루트n까지만 돌아도 됨

    - 두번째 for문에서는 i의 배수들을 false로 바꿔서 늘어놓은 수를 제거

    - 결국 m부터 n까지의 소수는 prime에 들어있는 true 값

    'PS > boj' 카테고리의 다른 글

    boj)1676 - 팩토리얼 0의 개수  (0) 2020.09.15
    boj)6588 - 골드바흐의 추측  (0) 2020.09.15
    boj)17299 - 오등큰수  (0) 2020.09.15
    boj)17298 - 오큰수  (0) 2020.09.15
    boj)10799 - 쇠막대기  (0) 2020.09.14
킹수빈닷컴