Numeri primi sul visual basic...come si fa???

di il
9 risposte

Numeri primi sul visual basic...come si fa???

Come si fa a far capire al visual basic quali sono i numeri primi su un vettore????

9 Risposte

  • Re: Numeri primi sul visual basic...come si fa???

    Non so se esiste una funzione in visual basic che ti dica se un numero è primo o no, puoi comunque creartene te una:

    sai che A è un numero primo solo se è divisibile per 1 e per se stesso, allora provi a dividere A per tutti i numeri che vanno da 2 a (A/2+1) e se trovi che uno di questi è un divisore di A, allora esso non è primo.
  • Re: Numeri primi sul visual basic...come si fa???

    Anche solo da due a radice di a.
  • Re: Numeri primi sul visual basic...come si fa???

    Già, non c'avevo pensato
  • Re: Numeri primi sul visual basic...come si fa???

    Penso di aver capito come fare...
  • Re: Numeri primi sul visual basic...come si fa???

    paf1990 ha scritto:


    penso di aver capito come fare...
    Questa routine e' un buon compromesso tra semplicita' e velocita':
    
    Public Function IsPrime(ByVal n As Long) As Boolean
       Dim r As Long
       Select Case n
          Case Is < 1: Err.Raise 5, "IsPrime", "IsPrime: argomento errato !"
          Case 1: ' niente, non e' primo !
          Case 2, 3: IsPrime = True
          Case Else
             r = n Mod 6
             If r = 1 Or r = 5 Then  ' se n Mod 6 e' diverso da 1 o 5 il numero NON e' primo.
                For r = 3 To Sqr(n) Step 2   ' controllo tutti i divisori dispari...
                   If (n Mod r) = 0 Then Exit Function
                Next
                IsPrime = True
             End If
       End Select
    End Function
    
  • Re: Numeri primi sul visual basic...come si fa???

    Però ho capito neanche la metà di quello che hai scritto... non sono molto pratico di visual basic...
  • Re: Numeri primi sul visual basic...come si fa???

    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 !
  • Re: Numeri primi sul visual basic...come si fa???

    Ho capito(piu o meno)...cmq avrei un altra domanda[anke se ti sembrerà banale] : come si fa a far eseguire la public function??? cioè, (ad esempio:il private sub si associa ad un comando) .... come si fa per la public function
    grazie



    ps
    non posso rispondere prima di sabato...
  • Re: Numeri primi sul visual basic...come si fa???

    paf1990 ha scritto:


    ho capito(piu o meno)...cmq avrei un altra domanda[anke se ti sembrerà banale] : come si fa a far eseguire la public function??? cioè, (ad esempio:il private sub si associa ad un comando) .... come si fa per la public function
    grazie



    ps
    non posso rispondere prima di sabato...
    Ok, hai ammesso di essere alle prime armi, ti consiglierei di trovare innanzitutto un buon vecchio libro di VB...

    Per la Function nessun problema, la metti dove vuoi, in un Modulo .bas o anche tra il codice del Form, in mezzo (non dentro, eh... ) alle Sub dei vari Button_Click, poi la richiami come una qualunque altra funzione del VB, come ti dicevo: If IsPrime(N) Then... Else...
    E' come se aggiungessi una nuova istruzione al VB ! (infatti il nome IsPrime e' per analogia con le gia' esistenti IsNumeric, IsDate, ecc...)

    Ciao!
Devi accedere o registrarti per scrivere nel forum
9 risposte