Eccolo.
codice:
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
On Error GoTo errore
Dim count As Long = TextBox1.Text
Me.Label7.Text = "1"
Control.CheckForIllegalCrossThreadCalls = False
'eventualmente pulisci il contenuto della TB
Me.RichTextBox1.Clear()
'Aggiungo l'unico numero primo pari:
Me.RichTextBox1.AppendText("2" + " ")
'Il numero correntemente analizzato:
'si parte da 3 e si prendono in consi-
'derazione solo i numeri dispari
Dim cur As Long = 3
'Col ciclo popolo l'array del risultato
For i As Long = 1 To count - 1
start:
Dim radq As Long = Math.Sqrt(cur)
Dim divisore As Long
'dato che abbiamo solo numeri dispari,
'si analizzano solo divisori dispari
'fino alla radice quadrata del numero
For divisore = 3 To radq Step 2
'se il risultato di una divisione
'da reto zero, il numero non è primo
If (cur Mod divisore) = 0 Then
'quindi aumento di due il numero analizzato
'(ottenendo il numero disperi successivo)
cur += 2
'e ricomincio ad analizzare
GoTo start
End If
Next
'se il risultato di nessuna divisione da 0
'il numero è primo
Me.RichTextBox1.AppendText(cur)
Me.RichTextBox1.AppendText(" ")
Me.ProgressBar1.Maximum = TextBox1.Text
Me.ProgressBar1.Value += 1
cur += 2
trd()
Label7.Text = Label7.Text + 1
Next
MsgBox("Processo completato")
Label9.BackColor = Color.Red
errore:
On Error Resume Next
End Sub