paf1990 ha scritto:
però ho capito neanche la metà di quello che hai scritto... non sono molto pratico di visual basic...
Ciao ! Puoi fare 2 cose:
1) prendi per buona la routine, e la usi semplicemente, cosi' com'e', nel tuo programma: per verificare se un numero e' primo...
If IsPrime(n) Then... Else...
2) cerchi di seguire la logica della routine VB, eventualmente chiedendo esattamente cosa non capisci... intanto provo a spiegare un po' il codice:
- la funzione restituisce un valore Boolean (vero/falso), il valore di default e' Falso, quindi in qualunque punto della funzione si trovi che il numero non e' primo basta semplicemente un Exit Function;
- la struttura Select Case serve a risolvere velocemente i "casi particolari": N<1 da' errore, 1 NON e' primo (per "convenzione"), mentre 2 e 3 sono numeri primi. In tutti gli altri casi (Case Else) bisogna fare delle ulteriori verifiche;
- la routine sfrutta il fatto che tutti i numeri primi (dopo il 3) sono della forma: (6 * K +/- 1) "sei K piu' o meno 1".
Usando l'operatore Mod (resto della divisione all'intero) equivale a dire che (N Mod 6) dev'essere uguale a 1 o 5. Se cosi' NON E', il numero NON e' primo (quindi, come detto sopra, basta un Exit Function).
Questo controllo permette di escludere velocemente ulteriori elaborazioni per due terzi dei numeri naturali.
- se invece il risultato del Mod e' 1 o 5, allora bisogna fare ulteriori verifiche, controllando tutti i divisori dispari tra 3 e la radice quadrata di N. Al primo divisore esatto, il numero NON e' primo e si esce, se si arriva in fondo al ciclo il numero invece e' primo !
N.B: se sei alle prime armi col VB non preoccuparti se non e' tutto chiarissimo ! Ciao !