SSONG Cloud

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

Algorithm/백준

[백준] 1929 소수 구하기

SSONGMI 2021. 4. 1. 22:48
반응형

문제 출처: www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

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

www.acmicpc.net

: 입력으로 M과 N이 주어지고 M이상 N이하인 소수를 모두 출력해야 한다.

: 이때, 소수를 구하는 방법을 모든 수를 순회하면 시간 초과가 나는 것 같다.

: 따라서 에라토스테네스의 체 라는 알고리즘을 사용할 수 있는데 각 수를 순회하며 그 수의 배수들을 지워나가며 마지막까지 남은 수들이 소수가 되는 방식이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StringBuilder sb = new StringBuilder();
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
	
		boolean[] v = new boolean[M+1];
		ArrayList<Integer> primes = new ArrayList<>();
		for(int i = 2; i <= M; i++) {
			if(!v[i]) {
				primes.add(i);
				for(int j = i+i; j <= M; j+=i) {
					v[j] = true;
				}
			}
		}
		for(int i : primes) {
			if(i >= N && i <= M)sb.append(i + "\n");
		}
		System.out.println(sb);
	}
}

www.acmicpc.net/problem/1929

반응형

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

[백준] 2580 스도쿠  (0) 2021.04.06
[백준] 1043 거짓말  (0) 2021.04.05
[백준] 11054 가장 긴 바이토닉 부분 수열  (0) 2021.04.01
[백준] 2589 보물섬  (0) 2021.04.01
[백준] 2606 바이러스  (0) 2021.03.31
Comments