Programma sui numeri primi

di il
7 risposte

Programma sui numeri primi

Salve a tutti,
stavo cercando di scrivere un programma che avesse tre opzioni di scelta:
Programma che controlla se un numero e' primo o no;
Programma che visualizza i numeri primi fino al numero inserito dall' utente; Programma che visualizza i primi N numeri primi (N viene inserito dall' utente).
Ci ho provato ma non son riuscito.
Potreste al più presto farmi vedere come si fa? Grazie.

7 Risposte

  • Re: Programma sui numeri primi

    Ci fai vedere dove sei rimasto fermo?
  • Re: Programma sui numeri primi

    Ecco il codice.
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    int rip, scelta, Numero, Num_da_controllare;
    bool primo (int Numero);
     bool verifica_Primo (int Num_da_controllare);
    
     int main() {
           
                     cout<<"Programma, sui numeri primi, che ha tre opzioni di scelta. Premere: "<<endl;
                     cout<<" 1 - Programma che controlla se un numero e' primo o no;"<<endl;
                     cout<<" 2 - Programma che visualizza i numeri primi fino al numero inserito dall' utente;"<<endl;
                     cout<<" 3 - Programma che visualizza i primi N numeri primi (N viene inserito dall' utente;"<<endl;
                     cin>>scelta;
                     
    if (scelta==1)
                     {
           {
        
                    
                     int Num=0;
           
           cout << "Verifica se un numero e' primo oppure no.";  
           cout << "\nInserisci il numero su cui vuoi effettuare la verifica: "; 
           cin >> Num;
           
           if (Num<=1)
           {cout<<"\nIl numero non e' primo.\n\n"<<endl;
           }
           else {
           primo(Num);
           }
          
    }
    
     
    }else { if (scelta==2)
    {   
    
    {   
     int N, i = 3;
     
        cout << "Qual e' il numero limite?\n";
        cin >> N;
     
     
        cout << "\nI numeri primi minori di " << N << " sono:\n2\n";
        while (i <= N)
        {
            if (verifica_Primo(i))
            cout << i << endl;
     
            i+=2; 
     
         };
     
        system ("pause");
        return 0;
    }
    }else {
         if (scelta==3)
         {
    
     
    
    {
        int N, riemp = 1, i = 3;
        cout <<"Programma che trova i primi N numeri primi e li visualizza."<<endl;
        cout <<"Inserisci Quanti numeri primi vuoi trovare?\n";
        cin >> N;
     
     
        cout << "\nI primi " << N << " numeri primi sono:\n2\n";
        do
        {
            if (verifica_Primo(i))
            {
                                  cout << i << endl;
                                  riemp++;
                                  }
     
            i+=2; 
         } while (riemp < N);
     
        system ("pause");
        return 0;
    }}}}
    void primo(int Numero);
    
     {
         
         int Resto=0;
         bool primo = true;
         
         for(int i=2; i<(Numero-1);i++) {
           Resto = Numero % i;  
           if(Resto==0) { primo = false; break; } 
                                         }
              if(primo) cout << "\nIl numero e' primo.\n\n";
         else cout << "\nIl numero non e' primo.\n\n";
         }
           }
    
     bool verifica_Primo (int Num_da_controllare)     
     {
         for (int k = 3; k < Num_da_controllare; k++)
         if (Num_da_controllare%k == 0) 
         return false;         
         return true; 
    }
    
    bool verifica_Primo (int Num_da_controllare)
    {
         for (int k = 3; k <Num_da_controllare; k++)
         if (Num_da_controllare%k == 0)
         return false;         
         return true; 
    }
    
    Grazie per l'aiuto.
  • Re: Programma sui numeri primi

    Controlla un attimo. Ci sono un casino di cose da migliorare ma almeno il programma gira. Non mettere variabili globali inutilmente.
    
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    int rip, scelta, Numero, Num_da_controllare;
    bool primo(int numero);
    bool verifica_Primo (int Num_da_controllare);
    
    int main() {
    
    	cout<<"Programma, sui numeri primi, che ha tre opzioni di scelta. Premere: "<<endl;
    	cout<<" 1 - Programma che controlla se un numero e' primo o no;"<<endl;
    	cout<<" 2 - Programma che visualizza i numeri primi fino al numero inserito dall' utente;"<<endl;
    	cout<<" 3 - Programma che visualizza i primi N numeri primi (N viene inserito dall' utente;"<<endl;
    	cin>>scelta;
    
    	if (scelta==1)
    	{
    		int Num=0;
    
    		cout << "Verifica se un numero e' primo oppure no."; 
    		cout << "\nInserisci il numero su cui vuoi effettuare la verifica: ";
    		cin >> Num;
    
    		if (Num<=1)
    		{
    			cout<<"\nIl numero non e' primo.\n\n"<<endl;
    		}
    		else 
    		{
    			if(primo(Num))
    				cout << "il numero è primo";
    			else
    				cout << "il numero non è primo";
    		}
    	}
    	else if (scelta==2)
    	{   
    			int N, i = 3;
    
    			cout << "Qual e' il numero limite?\n";
    			cin >> N;
    
    
    			cout << "\nI numeri primi minori di " << N << " sono:\n2\n";
    			while (i <= N)
    			{
    				if (verifica_Primo(i))
    					cout << i << endl;
    
    				i+=2;
    
    			};
    
    			system ("pause");
    			return 0;
    	}
    	else if (scelta==3)
    	{
    		int N, riemp = 1, i = 3;
    		cout <<"Programma che trova i primi N numeri primi e li visualizza."<<endl;
    		cout <<"Inserisci Quanti numeri primi vuoi trovare?\n";
    		cin >> N;
    
    		cout << "\nI primi " << N << " numeri primi sono:\n2\n";
    		do
    		{
    			if (verifica_Primo(i))
    			{
    				cout << i << endl;
    				riemp++;
    			}
    			i+=2;
    		} while (riemp < N);
    
    		system ("pause");
    		return 0;
    	}
    }
    
    bool verifica_Primo (int Num_da_controllare)     
    {
    	for (int k = 3; k < Num_da_controllare; k++)
    		if (Num_da_controllare%k == 0)
    			return false;         
    	return true;
    }
    
    bool primo(int Numero)
    
    {
    
    	int Resto=0;
    	bool numeroPrimo = true;
    
    	for(int i=2; i<(Numero-1);i++) {
    		Resto = Numero % i; 
    		if(Resto==0) { numeroPrimo = false; break; }
    	}
    	return numeroPrimo;
    }
    
  • Re: Programma sui numeri primi

    Grazie mille skynet! Adesso ho capito!
  • Re: Programma sui numeri primi

    Nella funzione primo() al posto di i<(Numero-1) metterei i<=Numero/2. Risparmi ripetizioni inutili, poichè un qualsiasi numero (non primo) non è divisibile mai per un numero maggiore della sua metà.
  • Re: Programma sui numeri primi

    Ciao si molto interessante quanto hai realizzato....io ho terminato un algoritmo che mi permette di fattorizzare prodotti di numeri primi di dimensioni molto elevate....anche 2048 bit!
  • Re: Programma sui numeri primi

    Ciao mro
    Ci sono alcune migliorie che potresti fare.
    Dato che un numero non primo è divisibile per un numero primo minore o uguale alla sua radice quadrata, potresti:

    - Invece di arrivare a N/2 potresti fermarti a Sqrt(N), con numeri grandi la differenza è enorme, con N uguale a un milione fai 1000 iterazioni incece che 500.000.

    - Poi dato che il divisore deve essere un numero primo è inutile dividere per 4, 6, 8 ecc, in prima istanza potresti eliminare i numeri pari (così dimezzi ancora le iterazioni), se poi vuoi fare le cose come si deve, man mano che trovi un numero primo lo metti in un array e poi dividi solo per i numeri primi contenuti in questo array (fermandoti alla radice quadrata di N), anche in questo caso le iterazioni si riducono drasticamente.

    Un altro approccio è quello del 'Crivello di Eratostene', butta un occhio in rete.
Devi accedere o registrarti per scrivere nel forum
7 risposte