JAVA로 소수 구하기

막판보스 작성일 13.06.20 22:19:31
댓글 7조회 2,929추천 1

이거 질문 아닙니다.

밑에 물어보신분 계셔서 댓글 달았는데 댓글이 잘려서 여기 올린겁니다.

애매하게 글 올려서 죄송합니다.


137173425130294.jpg

 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);
 }
}

********************************************************

댓글로 다니까 중간에 잘리네요ㅋ

왜 이렇죠?

 

자유·수다 인기 게시글