Aiuto visualizzare N numeri primi

di il
10 risposte

Aiuto visualizzare N numeri primi

Ciao a tutti,
sono nuovo nella programmazione e mi servirebbe un aiuto, non voglio che mi scriviate tutto l'algoritmo al massimo mi aiutate a impostare le parti più difficili ammesso che ci siano...
Dovrei fare un programma in C++ che permette di visualizzare N numeri primi, ad esempio se leggo un valore uguale a 10 mi dovrebbe visualizzare i primi 10 numeri primi (2, 3, 5, 7, 11, 13, 17, 19, 23. 29) Il mio problema è che non riesco a capire come risolvere il mio problema. Quindi se qualcuno mi potrebbe dare una logica da seguire, una spiegazione o qualsiasi altro aiuto che mi possa aiutare lo ringrazio con tutto il cuore...

Edit: in pratica vorrei più una mano teorica che pratica...

10 Risposte

  • Re: Aiuto visualizzare N numeri primi

    Potresti iniziare con lo scrivere una funzione che ti restituisce 1 se il valore passato come argomento è un numero primo, 0 altrimenti.
  • Re: Aiuto visualizzare N numeri primi

    Ok avevo già precedentemente sviluppato una funzione che calcolava se il numero fosse primo o no, ho solo dovuto applicare qualche modifica...
    
    int verificaprimo (int numero)
        {
        int resto ,primo;
        primo=1;
        for (int i=2; i<numero; i++)
        {
            resto=(numero%p);
            if (resto==0)
            {
                       primo=0;
                       return 0;
                       break;
            }
        }
        if (primo==q)
           {
                        return 1;
           }
           
        }
    
    adesso dovrei fare qualcosa tipo:
    
    {
        
        int resto, i, primo, nprimi ;
        primo=1;
        nprimi=0;
    while (nprimi !=numero)
    {
        for ( i=2; i<numero; i++)
        {
            resto=(numero%i);
            if (resto==0)
            {
                       primo=0;
            }
        }
        if (primo==1)
           {
                        cout << i << endl;
           }
           nprimi++;
        }
    }
    
    Però così facendo se inserisco un numero primo, 11, mi stampa per 11 volte 11... se invece il numero non è primo si ferma
    EDIT: forse mi sono spiegato male mettendo tutti quegli 11...
    quando inserisco il valore, ad esempio 5 che è numero primo mi stampa a schermo tipo:
    
    5
    5
    5
    5
    5
  • Re: Aiuto visualizzare N numeri primi

    Potresti usare il crivello di Eratostene http://it.wikipedia.org/wiki/Crivello_di_Eratosten
    è il metodo più semplice e con una complessita computazionale di O[Log(Log (N))] (Efficiente)
  • Re: Aiuto visualizzare N numeri primi

    @Sanmon: avevi scritto una funzione che ti dice se un numero è primo oppure no: perchè non la richiami? Le funzioni servono ad essere richiamate, non modificate!
    Quindi, dopo aver predisposto tale funzione potresti provare a scrivere un programma che ti dice quali sono i numeri primi nell'intervallo [1,100] (naturalmente la funzione che hai scritto non la devi modificare!!!)
  • Re: Aiuto visualizzare N numeri primi

    @Sarajevo Grazie, purtroppo ho dimenticato di dire che non abbiamo ancora studiato gli array, quindi ho delle "restrizioni" da seguire, quindi non credo di poter usare il crivello di Eratostene. Comunque forse posso estrapolare qualcosa.

    @candaluar Non ho ben capito, io ho fatto due funzioni (esclusa quella modificata che ho postato nel messaggio precedente) che sono in grado di stabilire se un numero è primo o viceversa, ora ti posto le due funzioni così se mai mi dici quale potrebbe essere la migliore...

    Questa è quella di prima non modificata
    
    int verificaprimo (int numero)
        {
        int resto ,primo;
        primo=true;
        for (int i=2; i<numero; i++)
        {
            resto=(numero%p);
            if (resto==0)
            {
                       primo=false;
                       cout<< "il numero non e' primo"<<endl;
                       break;
            }
        }
        if (primo==true)
           {
                       cout<< "il numero e' primo"<<endl;
           }
           
        }
    
    Mentre questa è un'altra:
    
    int  isprimo (int numbaget)
    {
         int primo, x, y;
         primo=true;
         x=(numbaget/2);
         y = (numbaget/ 2);
         for( numbaget> y;y > 1; y--) 
              {
                        if(!(numbaget%y)) 
                            {
                                 primo = false;
                                 x++;
                            }
              }
          //stampa a schermo     
         if(primo=true ) 
              {
                      cout << "Il numero precedentemente inserito non e' primo!"<<endl;
              }
         else
              {
                      cout << "Il numero precedentemente inserito e' primo!"<< endl;
              }
         system("PAUSE");     
    
  • Re: Aiuto visualizzare N numeri primi

    Allora, mi spiego meglio. Tu hai una funzione che ti dice se un numero è primo oppure no: questa funzione dovrebbe ricevere in input un valore e restituire in output 1 o 0. Decidi tu qual è la migliore (mi raccomando, fa che al suo interno non stampi niente a video).
    Supponiamo che la tua funzione si chiami IsPrime(); la tua funzione dovresti testarla in questo modo:
    int main()
    {
        int i;
        for( i=1;i<100;i++ )
        {
            if( IsPrime(i) )
               printf( "%d è primo\n", i );
        }
    }

    Così verifichi che la tua funzione si comporti correttamente (o almeno lo stia facendo con i primi 100 interi).
    Quando questo funzionerà, ti renderai conto che il problema di stampare i primi 10 (o i primi n) diventerà molto più facile da affrontare!
  • Re: Aiuto visualizzare N numeri primi

    @candaluar
    Perfetto grazie adesso funziona, ho rimosso il ciclo "for" facendo però rimanere i=3; ho aggiunto un ciclo while che mi permette di riavviare la funzione più volte fino a quando una variabile "stop" non sarà uguale al numero inserito, ad ogni ciclo se i assume il valore di primo lo stampo a schermo, incremento la variabile "stop" di 1 e (fouori dal costrutto if) aumento i di 2, se invece i non assume un valore primo lo aumento solamente il valore di i di due.

    Posto il codice perché non credo di essermi spiegato correttamente
    
    int Nnumprimi (int numero)
    {
     	int i, stop;
    	i=3;
    	stop=0;
         while (stop < numero)
          {
             if (verificaprimoNnumeri(i))
             {
                cout << i << endl;
                stop++;
             }
             i+=2;
          } 
    	  
          system ("pause");
          return 0;
    }
    
  • Re: Aiuto visualizzare N numeri primi

    Corretto.
    Tuttavia io cambierei il nome alla funzione verificaprimoNnumeri(): il nome dovrebbe farti capire cosa fa e così com'è è fuorviante, meglio sarebbe chiamarla IsPrime(), IsPrimeNumber(), IsNumeroPrimo(), IsPrimo(), VerificaPrimo()...
    Anche la funzione Nnumprimi() la rinominerei in qualcosa tipo StampaNPrimi() e il parametro magari lo chiamerei 'nprimi' perchè così chi usa la funzione non ha dubbi su cosa passarle...
  • Re: Aiuto visualizzare N numeri primi

    @candaluar
    Non sei il primo a dirmi che uso nomi incorretti per le variabili e le funzioni, pensa che ai miei primi programmi parecchie variabili le chiamavo "coso" "contacoso" "abbassacoso" e alle funzioni davo nomi tipo "ABC" "VDE" tasti schiacciati a caso insomma, adesso aggiusto tutto e grazie ancora
  • Re: Aiuto visualizzare N numeri primi

    Non preoccuparti; dare i nomi è la cosa più difficile!
Devi accedere o registrarti per scrivere nel forum
10 risposte