IT/알고리즘
백준 1929 소수구하기
어센트
2020. 2. 29. 21:08
https://www.acmicpc.net/problem/1929
1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)
www.acmicpc.net
원래 소수를 구하는 방식으로는 시간초과가 나서 에라토스테네스의 체 의 방식을 이용해야 시간초과 없이 문제를 해결 할 수 있었다.
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
|
package 수학2;
import java.io.*;
public class 소수_구하기 {
public static boolean[] primeNum;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String [] in =br.readLine().split(" ");
int m = Integer.parseInt(in[0]);
int n = Integer.parseInt(in[1]);
primeNum = new boolean[n+1];
getPrimeNum();
for(int i=m;i<=n;i++){
if(!primeNum[i]){
sb.append(i).append("\n");
}
}
System.out.println(sb);
br.close();
}
private static void getPrimeNum() { //에라토스테네스의 체
primeNum[1] = true;
for(int i=2;i<primeNum.length;i++)
for (int j = 2; i*j <primeNum.length ; j++) {
primeNum[i*j] = true;
}
}
}
|
cs |
기존에 해결하려고 했던 방식
1
2
3
4
5
6
7
|
static boolean chkPrime(int num){
if(num <=1) return false;
for (int i = 2; i < num ; i++) {
if(num%i==0) return false;
}
return true;
}
|
cs |