/* The Sieve of Eratosthenes implemented in Java

 * Robin Broad

 * November 2008

 * Part of a project to demonstrate an ability to

 * implement an algorithm in a range of different

 * computing languages and to use a range of

 * compilers, including the following:

 *

 * Java: BlueJ

 * C: Miracle C

 * C++: Microsoft Visual C++.NET

 * C#: Microsoft Visual C#.NET

 * Visual Basic: Microsoft Visual Basic.NET

 */

 

public class Sieve

{

    public static void main()

    {

        //variable declarations

        final int RANGE=1000;//we are calculating the prime numbers up to this number

        int[] listOfIntegers=new int[RANGE+1];//This array of integers will hold all the numbers up to the value of RANGE

                                              //Notice that RANGE+1 has been used so that we can use the array in the range

                                              // 1->RANGE to simplify the coding of the algorithm

        int root=(int)Math.sqrt((double)RANGE);//needed later on when removing multiples, casting is used since we're

                                               //only interested in integer values

        int product=0;//used later when removing multiples

        int printCount=0;//used during print formatting of the program output

                                               

        //initialising the integer array

        for(int n=1; n<=RANGE; n++)listOfIntegers[n]=n;

       

        //starting from n=2, "remove" multiples of n up the value of RANGE

        //repeat for increasing values of n up to the square root of RANGE

        for(int n=2; n<=root; n++)

        {

                //delete the multiples of n

                for(int multiplier=2; multiplier*n<=RANGE; multiplier++)

                {

                    product=n*multiplier;

                    listOfIntegers[product]=0;

                }

        }//end of multiple removal

       

        //print out the prime numbers remaining, remembering that 2 is the first prime number

        System.out.println("The Sieve of Eratosthenes program");

        System.out.println("Written in Java and compiled in BlueJ");

        System.out.println("Robin Broad, November 2008.\n");

        System.out.println("The prime numbers in the range: 1 to "+RANGE+" are:-");

       

        for(int n=2; n<=RANGE; n++)

        {

            //print all non-zero elements of the integer array in blocks of 10 numbers at a time

            if (listOfIntegers[n]!=0)

            {

                System.out.print(listOfIntegers[n]+"\t");

                printCount++;

                if(printCount%10==0)System.out.println();//every 10 items produces a new line

            }

        }

        System.out.println("\n\nEnd of Program.");

       

    }//end of main

}//end of class Sieve

 

//Robin Broad, November 2008

 

/*

 *This program produced the following output:

 

The Sieve of Eratosthenes program

Written in Java and compiled in BlueJ

Robin Broad, November 2008.

 

The prime numbers in the range: 1 to 1000 are:-

2       3       5       7       11      13      17      19      23      29      

31      37      41      43      47      53      59      61      67      71      

73      79      83      89      97      101     103     107     109     113    

127     131     137     139     149     151     157     163     167     173    

179     181     191     193     197     199     211     223     227     229    

233     239     241     251     257     263     269     271     277     281    

283     293     307     311     313     317     331     337     347     349    

353     359     367     373     379     383     389     397     401     409    

419     421     431     433     439     443     449     457     461     463    

467     479     487     491     499     503     509     521     523     541    

547     557     563     569     571     577     587     593     599     601    

607     613     617     619     631     641     643     647     653     659    

661     673     677     683     691     701     709     719     727     733    

739     743     751     757     761     769     773     787     797     809    

811     821     823     827     829     839     853     857     859     863    

877     881     883     887     907     911     919     929     937     941    

947     953     967     971     977     983     991     997    

 

End of Program.

 

 */