Advertisement
brilliant_moves

PrimeSieveOfEratosthenes.java

Mar 21st, 2014
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 1.72 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class PrimeSieveOfEratosthenes {
  4.  
  5.     /**
  6.     *   Program:    PrimeSieveOfEratosthenes.java
  7.     *   Purpose:    Find all primes up to a number using Eratosthenes' Sieve.
  8.     *   Creator:    Chris Clarke, author of books "50 Java Program Source Codes"
  9.                 and "50 More Java Source Codes".
  10.                 Each contains brand new material.
  11.                 Available now in e-book and paperback.
  12.     *   Created:    21.03.2014
  13.     */
  14.  
  15.     public static void main(String[] args) {
  16.  
  17.         int number = 0;
  18.  
  19.         if (args.length>0) {
  20.             try {
  21.                 number = Integer.parseInt(args[0]);
  22.                 runSieve(number);
  23.             } catch (NumberFormatException e) {
  24.                 System.out.println("That\'s not an integer!");
  25.             } // end try/catch
  26.         } else {
  27.             Scanner scan = new Scanner(System.in);
  28.             System.out.print("Enter a number between 1 & 100: ");
  29.             number = scan.nextInt();
  30.             runSieve(number);
  31.         } // end if
  32.     } // end main()
  33.  
  34.     public static void runSieve(int upperBound) {
  35.  
  36.         int sqrt = (int) Math.sqrt(upperBound); // square root
  37.  
  38.         // boolean array of non-primes, to begin with they're all false
  39.         boolean[] isComposite = new boolean[upperBound + 1];
  40.  
  41.         // find primes up to square root of upper bound
  42.         for (int m = 2; m <= sqrt; m++) {
  43.             if (!isComposite[m]) { // if prime
  44.                 // print prime number
  45.                 System.out.print(m + " ");
  46.  
  47.                 // mark every multiple of m as non-prime
  48.                 for (int k = m * 2; k <= upperBound; k += m) {
  49.                     // mark as not prime
  50.                     isComposite[k] = true;
  51.                 }//end for k
  52.             }//end if
  53.         }//end for m
  54.  
  55.         for (int m = sqrt+1; m <= upperBound; m++) {
  56.             if (!isComposite[m]) { // if prime
  57.                 // print prime number
  58.                 System.out.print(m + " ");
  59.             }//end if
  60.         }//end for m
  61.     }//end runSieve()
  62.  
  63. }//end class PrimeSieveOfEratosthenes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement