코딩 테스트
[백준] 1929번 소수 구하기
한 면만 쓴 종이
2023. 1. 19. 13:21
문제: M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입력:
- 첫째 줄에 자연수 M과 N이 빈칸을 사이에 두고 주어진다.
- M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
출력: 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
음 이 문제는 저번주에 풀었던 1979번이랑 비슷한 문제 같다!
그럼 이번에도 sqrt를 사용해야겠다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B1929 { //소수 구하기
public static void main(String[] args) throws IOException {
// 입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
//소수 판별
for(int i = 0; i <= b-a; i++) {
if(is_prime(a + i)) System.out.println(a + i);
}
}
public static boolean is_prime(int a) {
if (a == 1) return false;
else if (a == 2) return true;
for (int i = 2; i <= Math.sqrt(a); i++)
if (a % i == 0) return false;
return true;
}
}
이렇게 풀어서 맞췄다!
근데 더 좋은 방법이 있을까 하여 검색해 보았더니 이 문제는 에라토스테네스의 체를 쓰는 문제라고 한다.
이 방법이 더 효율이 좋다고해서 이 방법으로도 풀어봐야겠다.
JAVA [자바] - 소수 구하는 알고리즘 및 구현 (tistory.com)
JAVA [자바] - 소수 구하는 알고리즘 및 구현
들어가기 전에 소수 [Prime Number] 소수의 정의는 1보다 큰 자연수 중 1 과 그 수 자기 자신만을 약수로 갖는 자연수를 의미한다는 점은 누구나 알고 있을 것이다. 즉, 소수의 약수는 2개만을 갖고,
st-lab.tistory.com
이 글을 참고해서 풀었다!