문제 출처: https://www.acmicpc.net/problem/1929
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String[] arr = reader.readLine().split(" "); int M = Integer.parseInt(arr[0]); int N = Integer.parseInt(arr[1]); StringBuilder builder = new StringBuilder(); // 모든 자연수는 소수들의 곱으로 표현이 되기 때문에, // 2부터 N-1까지의 수 중에서 2의 배수를 모두 체로 거르고 남은 숫자들 중에서 3의 배수로 거르고를 반복해 // sqrt(N)까지 나눠서 남은 걸러지지 않고 남은 수들이 모두 소수가 된다. // 출처: http://ledgku.tistory.com/61 [견우와 직녀] boolean[] isPrimeArr = new boolean[N+1]; Arrays.fill(isPrimeArr, true); isPrimeArr[0] = false; isPrimeArr[1] = false; for(int i=2 ; i<=(int)Math.sqrt(N) ; ++i) { if (isPrimeArr[i]){ for (int j=i+i; j<=N; j+=i) isPrimeArr[j] = false; } } for(int i=M ; i<=N ; i++){ if(isPrimeArr[i]) builder.append(i).append("\n"); } System.out.println(builder); } } | cs |
'Algorithm' 카테고리의 다른 글
백준 9020번: 골드바흐의 추측 (0) | 2018.10.21 |
---|---|
백준 4948번: 베르트랑 공준 (0) | 2018.10.21 |
백준 2581번: 소수 (0) | 2018.10.21 |
백준 1978번: 소수 찾기 (0) | 2018.10.21 |
백준 1181번: 단어 정렬 (0) | 2018.10.20 |