입력범위롸 소수를 찾는 메소드에 주의한다.
Math.sqrt(num)는 해당하는 num의 제곱근을 double타입으로 반환한다.
즉 7을 넣으면 2.xxxx를 반환하는 것이다.
여기서 헷갈린 점은 만약 isPrime에 2가 들어간다면? 이었다. 2%2 == 0이니 안걸러지는거 아닐까 하는 생각이다.
하지만 이는 잘못된 생각이었다. 2의 제곱근은 1.xx이므로 반복문이 작동하지 않고 바로 true로 가기 때문이었다.
경계값에서 좀 더 주의할 필요가 있어 보인다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
while (true) {
int n = Integer.parseInt(br.readLine());
if (n == 0) {
break;
}
int count = 0;
for (int i = n + 1; i <= 2 * n; i++) {
if (isPrime(i)) {
count++;
}
}
System.out.println(count);
}
}
public static boolean isPrime(int num) {
if (num < 2) {
return false;
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
'java' 카테고리의 다른 글
[java] 백준 13909 창문 닫기 (1) | 2024.01.29 |
---|---|
[java] 17103 골드바흐 파티션 (0) | 2024.01.29 |
[java] 백준 1929 소수 구하기 (0) | 2024.01.29 |
[java] 백준 4134 다음 소수 (1) | 2024.01.29 |
[java] 백준 2485 가로수 (0) | 2024.01.26 |