Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Numeri Primi
Forum - C/C++ - Numeri Primi

Avatar
Fabiowd1990 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/07/2009

Segnala al moderatore
Postato alle 17:37
Mercoledì, 22/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++

  1. #include <iostream.h>
  2. #include <fstream.h>
  3.  
  4. int main()
  5. {int x;
  6. ofstream write("Numeriprimi.txt",ios::out);
  7. for(x == 1; x>0; ++x)
  8. {;
  9. 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)
  10. {
  11. cout << x << " e' un numero primo" << endl, write << x << endl;
  12. ;
  13. };
  14. }
  15. }


PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 18:00
Mercoledì, 22/07/2009
Testo quotato

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++

  1. #include <iostream.h>
  2. #include <fstream.h>
  3.  
  4. int main()
  5. {int x;
  6. ofstream write("Numeriprimi.txt",ios::out);
  7. for(x == 1; x>0; ++x)
  8. {;
  9. 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)
  10. {
  11. cout << x << " e' un numero primo" << endl, write << x << endl;
  12. ;
  13. };
  14. }
  15. }



Mi sembra un po' tutto un casino.
Allora:
Codice sorgente - presumibilmente Plain Text

  1. for(x == 1; x>0; ++x)


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++

  1. cout << x << " e' un numero primo" << endl, write << x << endl;


questo trasformalo in:
Codice sorgente - presumibilmente C/C++

  1. cout << x << " e' un numero primo" << endl;
  2. write << x << endl;


I punti e virgola qua e la non ho capito perchè li hai messi.
Comunque leggi un po su wikipedia http://it.wikipedia.org/wiki/Algoritmi_per_la_generazione_ ... e poi cerca di rifare il programma.

PM Quote
Avatar
Fabiowd1990 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/07/2009

Segnala al moderatore
Postato alle 19:36
Mercoledì, 22/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!!!

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 20:01
Mercoledì, 22/07/2009
Testo quotato


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 :)

PM Quote
Avatar
Fabiowd1990 (Normal User)
Rookie


Messaggi: 23
Iscritto: 20/07/2009

Segnala al moderatore
Postato alle 20:29
Mercoledì, 22/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...

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:42
Mercoledì, 22/07/2009

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 0:49
Giovedì, 23/07/2009
Testo quotato

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 è! ^^


Testo quotato

Postato originariamente da theprogrammer:

http://it.wikipedia.org/wiki/Crivello_di_Eratostene



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
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:08
Giovedì, 23/07/2009
Testo quotato

Postato originariamente da Lawliet:

Testo quotato


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. :k:

Luigi.

PM Quote