[BOJ] 백준 1929번 : 소수 구하기 - Java

2024. 12. 23. 17:53·Algorithm Solving/Java

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

  • 에라토스테네스의 체
    • 소수를 구하는 대표적인 방법
    • k=2 부터 √N 이하까지 반복하여 자연수들 중 k를 제외한 k의 배수들을 제외시킨다
import java.io.*;
import java.util.*;

public class Main {
        // true: 소수 아님, false: 소수
        public static boolean[] prime;

        public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        
        int M = Integer.parseInt(st.nextToken());
        int N = Integer.parseInt(st.nextToken());

        prime = new boolean[N+1];   // 0~N까지의 인덱스를 가진 boolean 배열 초기화
        getPrime();
        
        for (int i=M; i<=N; i++) {
            if (!prime[i]) bw.write(i+"\n");    // false일 경우 출력
        }
        bw.close();
    }
    
    // 에라토스테네의 체
    public static void getPrime() {
        prime[0] = prime[1] = true;

        // 2 부터 √N 이하까지 반복하여
        for (int i=2; i<=Math.sqrt(prime.length); i++) {
            
            if (prime[i]) continue; // 이미 체크한 인덱스면 continue

            // i의 배수
            for (int j=i*i; j<prime.length; j+=i) {
                prime[j] = true;
            }
        }
    }  
}

 

참고 : https://st-lab.tistory.com/84

 

[백준] 1929번 : 소수 구하기 - JAVA [자바]

https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.n

st-lab.tistory.com

https://st-lab.tistory.com/81

 

JAVA [자바] - 소수 구하는 알고리즘 및 구현

들어가기 전에 소수 [Prime Number] 소수의 정의는 1보다 큰 자연수 중 1 과 그 수 자기 자신만을 약수로 갖는 자연수를 의미한다는 점은 누구나 알고 있을 것이다. 즉, 소수의 약수는 2개만을 갖고,

st-lab.tistory.com


  • 시간 초과
  • 처음 접근한 방식 : 소수는 약수가 2개
    • for문이 두개면 O(n^2)이므로 시간이 초과한다!
import java.io.*;
import java.util.*;

public class Main {
        public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        
        int M = Integer.parseInt(st.nextToken());
        int N = Integer.parseInt(st.nextToken());
        int cnt;
        for (int i=M; i<=N; i++) {
            cnt = 0;
            for (int j=1; j<=i; j++) {
                if (i%j==0) cnt++;
            }
            if (cnt == 2) bw.write(i + "\n");
        }

        bw.close();
    }
}

시간복잡도 계산은 필수인데,,, 하기 시럿,,, 하지만 해야지

저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[BOJ] 백준 1697번 : 숨바꼭질 - Java  (1) 2024.12.26
[BOJ] 백준 10828번 : 스택 - Java  (0) 2024.12.26
[BOJ] 백준 2751번 : 수 정렬하기 2 - Java  (1) 2024.12.20
[BOJ] 백준 1260번 : DFS와 BFS - Java  (2) 2024.12.19
[BOJ] 백준 2839번 : 설탕 배달 - Java  (0) 2024.12.19
'Algorithm Solving/Java' 카테고리의 다른 글
  • [BOJ] 백준 1697번 : 숨바꼭질 - Java
  • [BOJ] 백준 10828번 : 스택 - Java
  • [BOJ] 백준 2751번 : 수 정렬하기 2 - Java
  • [BOJ] 백준 1260번 : DFS와 BFS - Java
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    sql
    그리디
    다이나믹프로그래밍
    백트래킹
    dp
    Firebase
    프로그래머스
    bootstrap
    BOJ
    자료구조
    jQuery
    HTML
    java
    시뮬레이션
    Subquery
    join
    websocket
    jwt
    백준
    jpa
    Google Fonts
    javascript
    CSS
    greedy
    mysql
    완전탐색
    DFS
    GROUP BY
    programmers
    BFS
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[BOJ] 백준 1929번 : 소수 구하기 - Java
상단으로

티스토리툴바