Laboratorio di calcolo
AA 2005/06
Prova individuale del 22/6/2006
primo turno


Create sul solito account una cartella prova_cognome e svolgete li' la prova. La prova e' valutata su 10 punti.
Se il programma non compila perdete 5 punti, se il programma compila ma ha seri problemi in fase di esecuzione (loop infiniti, mancanza di protezioni...) perdete 3 punti, se il programma compila, gira ma non fornisce i risultati richiesti perdete 2 punti. I punti rimenenti possono essere ulteriormente ridotti se non sono state seguite tutte le indicazioni (ad esempio se si sceglie di non tulizzare delle funzioni) o se non viene stampato il risultato o specificato quali valori ci si aspetta che l'utente inserisca, o se il programma non sia comprensibile per mancanza di commenti.

Scrivere un programma che elenchi tutti i numeri primi compresi tra 1 e un numero massimo scelto dall'utente.

Il programma dovra' invocare una funzione che accetti un argomento intero k (che dovra' essere maggiore o uguale a 1) e che restituisca un intero
che valga 1 per i numeri primi e zero per i non primi, secondo il prototipo
        int numero_primo(int k);

Per ottimizzare il riconoscimento dei numeri primi potete implementare l'algoritmo qui descritto o un altro di vostra scelta.
    1. per controllare se k sia divisibile per un certo numero intero n utilizzate l'operatore modulo (%).
        Se n e' un divisore per k allora k%n, resto della divisione tra gli interi k e n, sara' 0
    2. provare a dividere k per 2, 3, 3+2, 3+2+2, 3+2+2+2 .... e fermatevi
            - quando trovate un buon divisore (k non e' primo), oppure
            - quando il divisore abbia superato il valore della radice quadrata di k (k e' primo)

Suggerimenti:
scrivere un file .h con il prototipo della funzione
scrivere un file .cc contenente la funzione inizialmente vuota (con solo un return 1;)
scrivere un file .cc contenente il programma main
nel main leggere il numero massimo scelto dall'utente e scrivere il codice che per ogni numero chiami numero_primo, controlli il risultato ed eventualmente stampi il numero, se e' primo
solo quando questa parte compila e gira (chiamando primi tutti i numeri!) dedicatevi allo sviluppo dell'algoritmo da inserire nella funzione.