Advertisement
myersjo

Sieve

Jan 22nd, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.35 KB | None | 0 0
  1. import java.util.Scanner;
  2. public class Sieve {
  3.  
  4.     public static void main(String[] args) {
  5.         System.out.println("Enter a number that is greater than 1 to show all prime numbers up to that number: ");
  6.         Scanner inputScanner = new Scanner(System.in);
  7.         if (inputScanner.hasNextInt())
  8.         {
  9.             int inputLimit = inputScanner.nextInt();
  10.             if ( inputLimit < 2)
  11.             {
  12.                 System.out.println("Please enter a positive whole number that is greater than 1.");
  13.             }
  14.             else
  15.             {
  16.                 int[] allNumbersArray = new int[inputLimit-1];
  17.                 createSequence(allNumbersArray, inputLimit);
  18.                 sieve(allNumbersArray, inputLimit);
  19.                 printIntArray(allNumbersArray);
  20.             }
  21.         }
  22.        
  23.         else
  24.         {
  25.             System.out.println("Please enter a positive whole number that is greater than 1.");
  26.         }
  27.         inputScanner.close();
  28.     }
  29.    
  30.     public static void createSequence (int[] allNumbersArray, int inputLimit)
  31.     {
  32.         for (int index=0; index < allNumbersArray.length; index++)
  33.         {
  34.             allNumbersArray[index] = index+2;
  35.         }
  36.     }
  37.    
  38.     public static String nonCrossedOutSubseqToString (int[] nonCrossedOutNumbers)
  39.     {
  40.         String nonCrossedOutSubseq = "";
  41.        
  42.         return nonCrossedOutSubseq;
  43.     }
  44.    
  45.     public static String sequenceToString (int[] allNumbersArray)
  46.     {
  47.         String allNumbersString = "";
  48.         return allNumbersString;
  49.     }
  50.    
  51.     // sets multiples of number to number+N (N = inputLimit) in allNumbersArray
  52.     public static void crossOutHigherMultiples (int[] allNumbersArray, int originalNumber)
  53.     {
  54.         for (int currentNumber=((2*originalNumber)-2); ((currentNumber+originalNumber)<= (allNumbersArray.length+1)); currentNumber+= originalNumber)
  55.         {
  56.             // if the number is not already crossed out
  57.             if (allNumbersArray[currentNumber] < allNumbersArray.length+1)
  58.                 allNumbersArray[currentNumber] += (allNumbersArray.length+1);
  59.         }
  60.        
  61.     }
  62.    
  63.     public static void sieve (int[] allNumbersArray, int inputLimit)
  64.     {
  65.         double sqrtLimit = Math.sqrt(inputLimit);
  66.         for (int index=0; allNumbersArray[index] <= sqrtLimit; index++)
  67.         {
  68.             if (allNumbersArray[index] < inputLimit)
  69.             {
  70.                 crossOutHigherMultiples(allNumbersArray, allNumbersArray[index]);
  71.             }
  72.         }
  73.     }
  74.    
  75.     public static void printIntArray (int[] intArray)
  76.     {
  77.         System.out.println("");
  78.         for ( int index =0; index < intArray.length; index++)
  79.         {
  80.             if (intArray[index] < intArray.length)
  81.                 System.out.print(intArray[index] + ", ");
  82.         }
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement