1929번: 소수 구하기
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
www.acmicpc.net
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
boolean[] check = new boolean[N+1];
for(int i=2; i<=N; i++){ //2의배수부터 체크해야되니까 2부터 N까지 true로
check[i] = true;
}
for(int i=2; i<=N; i++){
if(!check[i]) //이미 체크한거는 다시 체크X
continue;
for(int j=i+i; j<=N; j+=i){
check[j] = false; //j를 제외한 j의 배수 체크하기
}
}
for(int i=M; i<=N; i++){
if(check[i])
System.out.println(i);
}
}
}
이전에 소수구하는 문제를 모든수를 체크하는 방식으로 ㅎㅎ.. 효율성을 하나도 고려안한채 풀었는데
이 문제에서는 시간초과가 난다. 정신차리고 에라토스테네스의체 이용해서 풀었다ㅎ_ㅎ
소수
소수를 구하는 방법에는 세 가지가 있다. ① (2부터 자기자신-1) 까지의 모든 수로 나누어보기 소수의 정의 = 1과 자기자신으로 나누어떨어지는 수 를 이용하는 방법! 모든 수로 나누어 보는 과정�
yeone2ee.tistory.com
[문제 풀이 생각 과정]
1. M~N 의 수만 체크하면 되지만, 에라토스테네스의체를 이용하려면 2의배수부터 체크해야한다.
그러므로 check[]배열은 2부터 N까지 true로 초기화해준다.
2. 2~N까지의 모든 수에 대하여
2를 제외한 2의배수, ... N을 제외한 N의배수까지 각 배수를 false로 체크한다.
3. true인 수 == 소수!
왜냐면 n의 배수로 체크가 되지 않았다는건, 1과 자기자신만을 약수로 갖는다는 의미이기 때문
'1d-1c > BOJ' 카테고리의 다른 글
9020_골드바흐의 추측 (JAVA) (0) | 2020.10.21 |
---|---|
4948_베르트랑 공준 (JAVA) (0) | 2020.10.20 |
2581_소수 (JAVA) (0) | 2020.10.20 |
1978_소수 찾기 (JAVA) (0) | 2020.10.20 |
1011_Fly me to the Alpha Centauri (JAVA) (0) | 2020.10.20 |