Fabiowd1990 (Normal User)
Rookie
Messaggi: 23
Iscritto: 20/07/2009
|
Salve a tutti, sono un principiante e sto provando ad imparare il c++ da autodidatta.
Ho scritto questo piccolo programma che calcola i numeri primi e li scrive in un file txt.
Secondo voi ho affrontato nella migliore maniera il problema?
Ecco il codice:
Codice sorgente - presumibilmente C++ |
#include <iostream.h> #include <fstream.h> int main() {int x; ofstream write("Numeriprimi.txt",ios::out); for(x == 1; x>0; ++x) {; if (x%2!=0 && x%3!=0 && x%4!=0 && x%5!=0&& x%6!=0 && x%7!=0 && x%8!=0 && x%11!=0) { cout << x << " e' un numero primo" << endl, write << x << endl; ; }; } }
|
|
|
Guglielmo (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/07/2009
|
Postato originariamente da Fabiowd1990:
Salve a tutti, sono un principiante e sto provando ad imparare il c++ da autodidatta.
Ho scritto questo piccolo programma che calcola i numeri primi e li scrive in un file txt.
Secondo voi ho affrontato nella migliore maniera il problema?
Ecco il codice:
Codice sorgente - presumibilmente C++ |
#include <iostream.h> #include <fstream.h> int main() {int x; ofstream write("Numeriprimi.txt",ios::out); for(x == 1; x>0; ++x) {; if (x%2!=0 && x%3!=0 && x%4!=0 && x%5!=0&& x%6!=0 && x%7!=0 && x%8!=0 && x%11!=0) { cout << x << " e' un numero primo" << endl, write << x << endl; ; }; } }
|
|
Mi sembra un po' tutto un casino.
Allora:
Codice sorgente - presumibilmente Plain Text |
Questo è parecchio sbagliato perchè tu non assegni ad x il valore 1, ma verifichi solamente se x è uguale ad 1; inoltre la variabile x non è stata inizializzata in precedenza e di conseguenza avrai memoria sporca. Poi per determinare se il numero corrente è primo non utilizzare quella condizione ma cerca di buttar giù un altro algoritmo.
Codice sorgente - presumibilmente C/C++ |
cout << x << " e' un numero primo" << endl, write << x << endl;
|
questo trasformalo in:
Codice sorgente - presumibilmente C/C++ |
cout << x << " e' un numero primo" << endl;
write << x << endl;
|
|
|
Fabiowd1990 (Normal User)
Rookie
Messaggi: 23
Iscritto: 20/07/2009
|
Grazie per i consigli, Guglielmo.
Allora, mi conviene assegnare alla variabile i valori già dall'int main?
Per quanto riguarda l'algoritmo, mi sembra che quelli proposti da wikipedia siano abbastanza più complicati del (per quanto laborioso) mio...
Grazie ancora per i suggerimenti!!!
|
|
Lawliet (Normal User)
Expert
Messaggi: 386
Iscritto: 09/04/2009
|
Allora, mi conviene assegnare alla variabile i valori già dall'int main? |
Non che ti conviene, ma di buona norma si inizilizzano sempre le variabili.
E poi il tuo programma controlla se sono primi però non tutti, fino a 11. Perchè non fai una cosa più semplice ossia:
Prendi un numero e lo dividi per tutti i precedessori, se è sempre a 0 allora è un primo primo e così via |
|
Fabiowd1990 (Normal User)
Rookie
Messaggi: 23
Iscritto: 20/07/2009
|
Uhm...Credo sia un buon metodo, ma per piccole cifre:
quando si raggiungono cifre molto grandi (parlo di miliardi) a dividere il numero per tutti i precedenti diventa una stress gigantesco per il processore, impiegherebbe molto tempo per ogni singola cifra...
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
|
|
Lawliet (Normal User)
Expert
Messaggi: 386
Iscritto: 09/04/2009
|
Postato originariamente da Fabiowd1990:
Uhm...Credo sia un buon metodo, ma per piccole cifre:
quando si raggiungono cifre molto grandi (parlo di miliardi) a dividere il numero per tutti i precedenti diventa una stress gigantesco per il processore, impiegherebbe molto tempo per ogni singola cifra... |
Beh, sicuramente il mio metodo è più funzionante del tuo, perchè li calcola davvero i numeri primi te no. Dovresti mettere un limite che ad esempio 169 con te apparirebbe numero primo che in realtà non lo è! ^^
Bell'algoritmo! Non ho mai colto l'occasione di studiare algoritmi per trovare N primi.
ps. - Se le mie risposte non vi soddisfano, ignoratele -
Ma per favore!!! Ogni tua risposta è sempre un aiuto prezioso! Ultima modifica effettuata da Lawliet il 23/07/2009 alle 0:50 |
|
gigisoft (Member)
Guru
Messaggi: 696
Iscritto: 11/10/2008
|
Postato originariamente da Lawliet:
Allora, mi conviene assegnare alla variabile i valori già dall'int main? |
Non che ti conviene, ma di buona norma si inizilizzano sempre le variabili.
E poi il tuo programma controlla se sono primi però non tutti, fino a 11. Perchè non fai una cosa più semplice ossia:
Prendi un numero e lo dividi per tutti i precedessori, se è sempre a 0 allora è un primo primo e così via |
in realta' per vedere se N e' primo basterebbe dividerlo per tutti i numeri fino a Sqrt(N).
Comunque questa discussione sui numeri primi e' gia' stata affrontata in un altro post.
Poi se vi incuriosisce il problema della divisibilita' guardate questo:
http://www.pierotofy.it/pages/extras/forum/337/62118-crite ...
Ciao.
Luigi. |
|