RICERCA NUMERI PRIMI CON I VETTORI Consideriamo un programma per il calcolo di tutti i numeri primi fino a un valore massimo fornito dall’utente. L’interfaccia (realizzata con un form) è la seguente: Nella casella di testo bisogna inserire il numero massimo fino al quale si vuole arrivare (es. 100) e nella text area compare l’elenco dei numeri primi fino al numero massimo inserito. A) IL CICLO DI CALCOLO CON UNA FUNZIONE La funzione associata al bottone CALCOLA può essere scritta in questo modo: function calcola() { var i; var max = document.getElementById("numeri").value; document.getElementById("primi").value = ""; //Ciclo di ricerca di tutti i numeri primi fino a max for (i=2;i<max;i++) if (verifica(i)) document.getElementById("primi").value += " "+i; } Si noti che abbiamo fatto uso di una funzione secondaria verifica per verificare se un dato valore è primo oppure no. Si tratta di una funzione booleana, che torna true se il numero passato è primo oppure false se non è primo. B) PRIMA VERSIONE DELLA FUNZIONE VERIFICA Una prima versione della funzione verifica è la seguente: function verifica(x) { var i; for (i=2;i<x;i++) { if (x%i==0) return false; } return true; } Questa funzione controlla la primalità di x provando a dividerlo per tutti i valori compresi fra 2 e il numero stesso meno uno. C) SECONDA VERSIONE DELLA FUNZIONE VERIFICA La prima versione di verifica non è molto efficiente. Sarebbe meglio salvare i numeri primi via via trovati in un vettore e usare questi numeri (già calcolati) per verificare quelli successivi (in modo da non ripetere ogni volta tutto il calcolo daccapo). In pratica la nostra nuova funzione deve: 1) Cercare il numero x nel vettore contenente tutti i numeri primi salvati 2) Se il numero x è presente nel vettore, la funzione deve tornare true 3) Se il numero x è multiplo (esattamente divisibile) per uno dei numeri primi salvati nel vettore, la funzione deve tornare false 4) Se le condizioni 2 e 3 non sono verificate, deve verificare se x è un numero primo, provando a dividerlo per tutti i numeri (oltre il max contenuto nel vettore) 5) Se non è divisibile per nessun numero, x deve essere aggiunto al vettore dei numeri primi e la funzione deve tornare true