Advertisement
NelloRizzo

Crivello di Eratostene

Apr 21st, 2020
889
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 1.45 KB | None | 0 0
  1. Module Module2
  2.  
  3.     Sub Eratostene(max As Integer)
  4.         ' creo il crivello nel quale alla fine ci sarà TRUE se il numero
  5.         ' in quella posizione è primo, FALSE altrimenti
  6.         Dim numeri(max + 1) As Boolean ' +1 perché mi è più comodo per gestire il caso 0
  7.         ' inizialmente TUTTI i numeri sono PRIMI
  8.         For indice As Integer = 0 To numeri.Length - 1
  9.             numeri(indice) = True
  10.         Next
  11.         Dim scanner As Integer = 2 ' parto da 2
  12.         While scanner < max - 1 ' scansiono il crivello
  13.             If numeri(scanner) Then ' se nella posizione che sto valutando c'è un numero primo
  14.                 ' dico che tutti i suoi multipli NON sono primi
  15.                 ' scansiono dal primo multiplo del numero corrente (scanner*2) fino all'ultimo con passo (scanner)
  16.                 For indice As Integer = scanner * 2 To numeri.Length - 1 Step scanner
  17.                     numeri(indice) = False
  18.                 Next
  19.             End If
  20.             ' passo al numero successivo
  21.             scanner += 1
  22.         End While
  23.         ' stampo il crivello
  24.         For indice As Integer = 2 To numeri.Length - 1
  25.             ' se nella posizione indicata da "indice" c'è true, significa che il numero è primo
  26.             If numeri(indice) Then Console.WriteLine(indice)
  27.         Next
  28.     End Sub
  29.     Sub Main()
  30.         ' scrivere un algoritmo che stampi tutti i numeri primi da 2 fino ad un numero dato
  31.         Eratostene(1000)
  32.     End Sub
  33. End Module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement