/* The Sieve of Eratosthenes implemented in C#

 * 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

 */

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace C_SharpSieve

{

    class Sieve

    {

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

       

        static void Main()

        {

            //variable declarations

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

            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

            int n,multiplier=0;//used a loop counter

                                                     

            //initialising the integer array

            for(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(n=2; n<=root; n++)

           {

               //delete the multiples of n

               for(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.Console.Write("The Sieve of Eratosthenes program\n");

            System.Console.Write("Written in C# and compiled using Microsoft Visual C# 2008 Express\n");

            System.Console.Write("Robin Broad, November 2008.\n");

                System.Console.WriteLine("The prime numbers in the range: 1 to {0,4} are:-",RANGE);

       

            for(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.Console.Write("{0,4}\t",listOfIntegers[n]);

                    printCount++;

                    if(printCount%10==0)System.Console.Write("\n");//every 10 items produces a new line

                }

            }

                System.Console.WriteLine("\n\nEnd of program.\n");    

        }//end of main

    }//end class

}//end namespace

 

//Robin Broad, November 2008

 

/*

 *This program produced the following output:

 

The Sieve of Eratosthenes program

Written in C# and compiled using Microsoft Visual C# 2008 Express

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.

 

Press any key to continue . . .

 

 */