이번 문제는 에라토네스의 체를 이용하여 문제를 풀어보겠다.
먼저, 에라토네스의 체를 이용하면 효율적이게 소수가 아닌 수들을 구해낼 수 있다.
자세한 에라토네스의 체는 검색하길 바라며, 나는 아래와 같이 구현했다.
소수가 아닌 수를 구할 때, set에 저장하여 소수가 아닌 수를 구하고, 소수인 수를 구할 땐 set에 포함된 수인지 확인하는 방식으로 하였다.
import java.util.*;
public class M1929 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt(), N = sc.nextInt();
StringBuilder sb = new StringBuilder();
Set<Integer> set = new LinkedHashSet<>(N - M);
for(int i = 2; i * i <= N; i++) {
int num = i * i;
while(num <= N) {
set.add(num);
num+=i;
}
}
for(int i = M; i <= N; i++) {
if(i < 2 || set.contains(i)) continue;
sb.append(i).append("\n");
}
System.out.println(sb);
}
}
'알고리즘 분류 > 수학' 카테고리의 다른 글
17103 골드바흐 파티션 JAVA (0) | 2023.04.16 |
---|---|
6588 골드바흐의 추측 JAVA (0) | 2023.04.16 |
1978 소수 찾기 JAVA (0) | 2023.04.14 |
1943 최소공배수 JAVA (0) | 2023.04.14 |
2609 최대공약수와 최소공배수 (0) | 2023.04.14 |