Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Module Module2
- Sub Eratostene(max As Integer)
- ' creo il crivello nel quale alla fine ci sarà TRUE se il numero
- ' in quella posizione è primo, FALSE altrimenti
- Dim numeri(max + 1) As Boolean ' +1 perché mi è più comodo per gestire il caso 0
- ' inizialmente TUTTI i numeri sono PRIMI
- For indice As Integer = 0 To numeri.Length - 1
- numeri(indice) = True
- Next
- Dim scanner As Integer = 2 ' parto da 2
- While scanner < max - 1 ' scansiono il crivello
- If numeri(scanner) Then ' se nella posizione che sto valutando c'è un numero primo
- ' dico che tutti i suoi multipli NON sono primi
- ' scansiono dal primo multiplo del numero corrente (scanner*2) fino all'ultimo con passo (scanner)
- For indice As Integer = scanner * 2 To numeri.Length - 1 Step scanner
- numeri(indice) = False
- Next
- End If
- ' passo al numero successivo
- scanner += 1
- End While
- ' stampo il crivello
- For indice As Integer = 2 To numeri.Length - 1
- ' se nella posizione indicata da "indice" c'è true, significa che il numero è primo
- If numeri(indice) Then Console.WriteLine(indice)
- Next
- End Sub
- Sub Main()
- ' scrivere un algoritmo che stampi tutti i numeri primi da 2 fino ad un numero dato
- Eratostene(1000)
- End Sub
- End Module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement