martedì 10 aprile 2012

Numeri primi

Ecco un'altro programma in stile benchmark. Effettua alcuni calcoli e mostra a linea di comando i numeri primi minore di un numero in input.

Questo programma l'ho scritto perché dovevo fare pratica con un sistema multi-thread. In input questo programma chiede quanti thread utilizzare e un limite massimo da non superare.
Credo si meglio fare delle piccole precisazioni riguardo i numeri primi. Un numero primo è un numero che si può dividere interamente solo per 1 e per se stesso. Ne deriva che l'unico numero primo pari è 2. Si può anche dimostrare che se un numero ha dei fattori almeno uno di questi è minore o uguale alla radice del numero.
Con queste considerazioni si può scrivere il programma. Il linguaggio che ho utilizzato è il C# dato che ha delle utili funzioni che permettono semplicemente la manipolazione dei thread. Ogni funzione eseguita da un thread ha un parametro, il numero da cui iniziare. Questo serve per evitare che i thread facciano più volte lo stesso lavoro dato che possiedono lo stesso incremento non si sovrapporranno mai.
Per verificare la primitività del numero ogni thread chiama una funzione che calcola il resto della divisione del numero per tutti i numeri dispari (escluso 1) minori o uguali della radice del numero, se dovesse risultare resto 0 allora il numero non è primo.
Inoltre salva il risultato nel file "file.txt" nel caso si dovessero fare dei calcoli a parte.
Appena ha finito di eseguire i calcoli mostra il tempo impiegato ad eseguirli, la precisione è forse eccessiva (decimi di microsecondo...)
Nel programma ho anche inserito una funzione che effettua la scomposizione di un numero in fattori primi. Accetta numeri anche abbastanza grandi, la dimensione di un long.


DOWNLOAD:
Dropbox - Google Drive

SCREEN:

Nessun commento:

Posta un commento