문제
풀이 방법
- 2 이상 N 미만의 수 중에 나누어 떨어지는 수가 존재하지 않을 경우 소수로 판별
- 시간 복잡도 : O(N²)
- 에라토스테네스의 체 알고리즘
- 시간 복잡도 : O(Nlog(log N))
- link
코드
👇🏻 기본적인 방법
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int M = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
int sum = 0, min = 0
for (int i = M; i <= N; i++) {
for (int j = 2; j <= i; j++) {
if (i == j) {
sum += i;
if (min == 0) {
min = i;
}
}
if (i % j == 0) {
break;
}
}
}
if (sum == 0) {
System.out.println(-1);
} else {
System.out.printf("%d\n%d", sum, min);
}
}
}
👇🏻에라토스테네스의 체 알고리즘
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static boolean[] prime;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int M = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
int sum2 = 0, min2 = 0;
makePrime(N);
for (int i = M; i <= N; i++) {
if (prime[i] == false) {
sum2 += i;
if (min2 == 0) {
min2 = i;
}
}
}
if (sum2 == 0) {
System.out.println(-1);
} else {
System.out.printf("%d\n%d\n", sum2, min2);
}
}
public static void makePrime(int N) {
prime = new boolean[N + 1];
prime[0] = true;
prime[1] = true;
for (int i = 2; i < Math.sqrt(N); i++) {
for (int j = i * i; j < prime.length; j += i) {
prime[j] = true;
}
}
}
}
'코딩테스트' 카테고리의 다른 글
[프로그래머스 / lv 1] 같은 숫자는 싫어 (JAVA_해시) (0) | 2023.03.19 |
---|---|
[백준 / 실버5] 11866 : 요세푸스 문제 0 (JAVA) (0) | 2023.03.18 |
[백준 / 실버5] 1251 : 단어 나누기 (JAVA) (0) | 2023.03.17 |
[백준 / 브론즈1] 1236 : 성 지키기 (JAVA) (0) | 2023.03.17 |
[프로그래머스 / lv 2] 전화번호 목록 (JAVA_해시) (1) | 2023.03.16 |