'******************************************************

'

' The Sieve of Eratosthenes implemented in Visual Basic

' 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

'

'******************************************************

 

 

Module VBSieve

 

    Sub Main()

        'variable declarations

        Dim Range As Integer = 1000

        Dim listOfIntegers(Range + 2) As Integer 'This array of integers will hold all the numbers up to the value of RANGE

        Dim root = 100   'needed later on when removing multiples,

        'DirectCast(Math.Sqrt(1000), Integer)

        'DirectCast(Range, Double)

        'casting is used since we're

        'only interested in integer values

        Dim product As Integer = 0 'used later when removing multiples

        Dim printCount As Integer = 0 'used during print formatting of the program output

        Dim n As Integer = 0 'used a loop counter

        Dim multiplier As Integer = 0 'used a loop counter

        Dim limit As Integer = 0 'used when removing multiples

 

        'initialising the integer array

        For n = 1 To Range Step 1

            listOfIntegers(n) = n

        Next 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 To root Step 1

            'delete the multiples of n

            limit = (Range \ n) 'note that "\" means "integer division" in VB

            For multiplier = 2 To limit Step 1

                product = n * multiplier

                listOfIntegers(product) = 0

            Next multiplier

        Next n 'end of multiple removal

 

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

        System.Console.WriteLine("The Sieve of Eratosthenes program")

        System.Console.WriteLine("Written in Visual Basic and compiled using Microsoft Visual Basic 2008 Express")

        System.Console.WriteLine("Robin Broad, November 2008.")

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

 

        For n = 2 To Range Step 1

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

            If listOfIntegers(n) <> 0 Then

                System.Console.Write(listOfIntegers(n))

                System.Console.Write(ControlChars.Tab)

                printCount = printCount + 1

                If (printCount Mod 10) = 0 Then

                    System.Console.WriteLine() 'every 10 items produces a new line

                End If

            End If

        Next n

        System.Console.WriteLine()

        System.Console.WriteLine("End of program.")

    End Sub

 

End Module

 

'Robin Broad, November 2008

 

'This program produced the following output:

 

'The Sieve of Eratosthenes program

'Written in Visual Basic and compiled using Microsoft Visual Basic 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.