[백준] 1929번 소수구하기

2025. 9. 16. 15:26·Algorithm/백준

소수구하기 문제다.

 

이 문제는 에라토스테네스의 체를 사용해야 하는 문제다.

 

우선 isNotPrime이라는 배열을 선언해준다. 이때 이 배열은 boolean타입이다.

boolean 타입은 기본적으로 false로 초기화 되어있다. 

 

isNotPrime[0] = isNotPrime[1] = true;
		
		for(int i = 2; i * i <= M; i++) {
			if(!isNotPrime[i]) {
				for(int j = i * i; j <= M; j += i) {
					isNotPrime[j] = true;	
				}
			}
		}

 

이 코드가 핵심이다. 0, 1은 소수가 아니다.

그렇기 때문에 배열은 true가 된다.

 

2부터 for문을 돌렸을 때 i값의 제곱수에 준하거나 그보다 작은 수까지 판별하게 되는데

이게 에라토스테네스의 체이다.

// 2부터 n의 제곱근까지의 모든 수를 확인

 

그리고 그 이하의 수는 모두 판별했기 때문에 i * i 부터 보게 된다.

1) 자기 자신은 소수

2) 자기의 배수는 모두 소수가 아님

 

이렇게 모두 true를 넣어주고 원래 초기값인 false은 가만히 있게된다.

그렇게 소수인 배열만 잘 출력을 해주면 결과값이 나온다.

 

package com.study;

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

public class Main {
	static final int LIMIT = 1000000;
	static final boolean[] isNotPrime = new boolean[LIMIT + 1]; // 기본적으로 다들 소수가 아닌~
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		isNotPrime[0] = isNotPrime[1] = true;
		
		for(int i = 2; i * i <= M; i++) {
			if(!isNotPrime[i]) {
				for(int j = i * i; j <= M; j += i) {
					isNotPrime[j] = true;	
				}
			}
		}
		
		for(int i = N; i <= M; i++) {
			if(!isNotPrime[i]) {
				System.out.println(i);
			}
		}
		
	}

}

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

[백준] 2609번 최대공약수와 최소공배수  (0) 2025.09.14
[백준] 11660번 구간 합 구하기 5  (0) 2025.09.14
[백준] 4344번 평균은 넘겠지  (1) 2025.09.01
'Algorithm/백준' 카테고리의 다른 글
  • [백준] 2609번 최대공약수와 최소공배수
  • [백준] 11660번 구간 합 구하기 5
  • [백준] 4344번 평균은 넘겠지
싹난 감자🥔🌱
싹난 감자🥔🌱
개발 블로그
  • 싹난 감자🥔🌱
    감자에 싹이나서 잎이나서
    싹난 감자🥔🌱
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • Spring (3)
      • Java (17)
      • LLM (1)
      • DevOps (4)
      • Algorithm (14)
        • 백준 (4)
        • 프로그래머스 (0)
        • 코드업 (10)
      • Computer Science (3)
        • Operating System (2)
        • Computer Architecture (1)
      • Trouble Shooting 🚀 (0)
      • 회고 & 성장기록 (1)
      • 설계 📐 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바Scanner비교
    자바 입력
    Java
    Scanner
    2차원 배열
    BufferedReader
    비트
    알고리즘입력
    코딩테스트
    2진수
    자바성능
    docker
    자바BufferedReader
    배포
    구간합
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
싹난 감자🥔🌱
[백준] 1929번 소수구하기
상단으로

티스토리툴바