이거 질문 아닙니다.
밑에 물어보신분 계셔서 댓글 달았는데 댓글이 잘려서 여기 올린겁니다.
애매하게 글 올려서 죄송합니다.
package main;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class PrimeNumber {
public void getPrimeNumber(int max) {
long startTime = System.currentTimeMillis();
boolean[] isPrime = new boolean[max + 1];
int cnt = 0;
while (cnt <= max) {
isPrime[cnt++] = true;
}
isPrime[0] = false;
isPrime[1] = false;
cnt = 2;
int multiple;
int tmp;
while (cnt <= max) {
multiple = 2;
while (isPrime[cnt]) {
tmp = cnt * multiple;
multiple++;
if (tmp > max)
break;
if (isPrime[tmp])
isPrime[tmp] = false;
}
cnt++;
}
long elapsedTime = System.currentTimeMillis() - startTime;
cnt = 0;
int total = 0;
while (cnt <= max) {
if (isPrime[cnt]) {
System.out.println(cnt);
total++;
}
cnt++;
}
System.out.println("계산 시간 : " + elapsedTime + "ms");
System.out.println("1 ~ " + max + "까지의 소수 갯수 : " + total);
// 1 ~ 1000000까지의 계산 시간은 55ms이고, 소수의 갯수는 78498개이다.
}
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out
.println("****최대값까지의 소수 구하기****\n종료를 원할 경우 0을 입력해주세요.\n최대값 입력 : ");
int max = 0;
while (max < 2) {
try {
max = scan.nextInt();
if (max == 0) {
System.out.println("종료합니다.");
System.exit(0);
} else if (max < 2) {
System.out.println("1보다 큰 수를 입력해주세요.");
}
} catch (InputMismatchException e) {
System.out.println("숫자만!!");
scan.next();
} catch (NoSuchElementException e) {
System.out.println("강제종료!");
System.exit(0);
}
}
PrimeNumber prime = new PrimeNumber();
prime.getPrimeNumber(max);
}
}
********************************************************
댓글로 다니까 중간에 잘리네요ㅋ
왜 이렇죠?