Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - numeri primi
Forum - C/C++ - numeri primi

Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 12:05
Lunedì, 02/02/2009
Ho un esercizio che dice: dato un numero scrivere una funzione che controlla se il numero inserito è primo. poi utilizzando la funzione appena realizzata scrivere un programma che fato un numero intero visualizzi a video tutti i numeri primi minori o uguali a quello dato.
Il mio problema è la seconda parte cioè quella di stampare a video tutti i numeri primi minori o uguali a quello dato. Posto il codice che ho scritto fin'ora:

Codice sorgente - presumibilmente C++

  1. #include<stdlib.h>
  2. #include<stdio.h>
  3.  
  4. int primo(int n) {
  5.     if(n/n & n/1)
  6.      {
  7.             printf("Il numero %d inserito e' primo \n",n);
  8.             }
  9.     else
  10.             printf("Il numero %d inserito non e' primo \n",n);
  11.            
  12.             return n;
  13.             }
  14.    
  15. int verifica(int n) {
  16.     int i;
  17.    
  18.     for (i=1;i<n;i++)
  19.      {
  20.      if(n/n & n/1)
  21.     printf("i numeri primi fino al numero inserito sono: %d \n",i);
  22. }
  23.     return n;
  24. }
  25.    
  26. int main () {
  27.     int n,i;
  28.    
  29.     printf("Calcolo numeri primi \n");
  30.     printf("Inserisci un numero: ");
  31.     scanf("%d",&n);
  32.    
  33.     printf("",primo(n));
  34.     printf("",verifica(n));
  35.    
  36. system ("pause");
  37. return 0;
  38. }


Ultima modifica effettuata da wicca89 il 02/02/2009 alle 14:13
PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 14:07
Lunedì, 02/02/2009
postresti modificare il post e mettere il sorgente in un blocco "Code"?

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 14:14
Lunedì, 02/02/2009
fatto :P:D

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 14:21
Lunedì, 02/02/2009
ma è la stessa domanda che hai già postato sul forum del C++?

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 14:31
Lunedì, 02/02/2009
no! Facendo programmazione in c il forum del c++ non l'ho mai neanche aperto :D.

PM Quote
Avatar
Overflow (Normal User)
Expert


Messaggi: 334
Iscritto: 11/01/2008

Segnala al moderatore
Postato alle 17:38
Lunedì, 02/02/2009
un numero si dice primo se è solo se è divisibile per 1 e per se stesso. Nel tuo algoritmo hai scritto, se non sbaglio:

Codice sorgente - presumibilmente Plain Text

  1. if(n/n && n/1)
  2. /*numero primo*/


4 non è un numero primo quindi, 4/4 è vero,e 4/1 è vero, risulta che 4 è primo.

Devi verificare se n non è divisibile prima per gli altri numeri primi:

Codice sorgente - presumibilmente C++

  1. int primo(int n)
  2. {
  3. int i=2;
  4. int num = n;
  5.  
  6. while(n>1)
  7. {
  8. while((n %i)==0)
  9. {
  10.  n/=i;
  11. }
  12. i++;
  13. }
  14.  
  15. if(--i == num)/* il numero è primo*/
  16.  return 1;
  17. return 0;
  18. }



non l'ho testata, dovrebbe funzionare...
Codice sorgente - presumibilmente C#

  1. int main()
  2. {
  3. /* prendiamo come numero base 8*/
  4. int i;
  5. for(i=0;i<=8;i++)
  6. {
  7.  if(primo(i))
  8. printf("Il numero %d è primo", i);
  9. }
  10.  
  11. return 1;
  12. }



dalla main chiami la funzione primo() e li passi i numeri che vanno da 0 a base(nel nostro caso 8).
Potrebbero esserci errori, perchè al momento non posso testare il codice.

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 18:12
Lunedì, 02/02/2009
mi sono permessa di apportare alcune modifice al codice per la mia traccia e funziona!! Grazieee!!!

Codice sorgente - presumibilmente C++

  1. #include<stdlib.h>
  2. #include<stdio.h>
  3.  
  4. int primo(int n)
  5. {
  6. int i=2;
  7. int num = n;
  8.  
  9. while(n>1)
  10. {
  11. while((n %i)==0)
  12. {
  13. n/=i;
  14. }
  15. i++;
  16. }
  17.  
  18. if(--i == num)/* il numero è primo*/
  19. return 1;
  20. return 0;
  21. }
  22.  
  23.  
  24. int main () {
  25.  
  26. int i,n;
  27.  
  28. printf("Inserisci un numero: ");
  29.     scanf("%d",&n);
  30. for(i=0;i<=n;i++)
  31. {
  32. if(primo(i))
  33. printf("Il numero %d e' primo \n", i);
  34. }
  35.  
  36. system ("pause");
  37. return 0;
  38. }


PM Quote
Avatar
eddiewrc (Member)
Expert


Messaggi: 560
Iscritto: 30/04/2006

Segnala al moderatore
Postato alle 22:09
Martedì, 03/02/2009
se cerchi nei programmi disponibili sul sito, ce ne è uno che appunto trova tutti i numeri primi in tempo O(n^0.5) scritto in c


La conoscenza non ha mai fatto del male a nessuno. Caso mai hanno fatto del male quelli che hanno impiegato MALE la loro conoscenza. La conoscenza deve essere libera e quando dico libera intendo "free as freedom" e non "free as a free beer".
PM Quote