Numeri primi

di Anonimizzato20791 il
17 risposte
Ciao a tutti, oggi mentre programmavo ho deciso di risolvere un esercizio che trattava i numeri primi purtroppo dopo quasi due ore non sono riuscito a trovare una soluzione adeguata;

la traccia dell'esercizio chiede di stampare su schermo se il numero inserito è primo: il numero è primo ,mentre se non è primo chiede di stampare il numero non è primo;

ho preso in considerazione multipli di 2 e di 3;
ma non funziona con il 2 o con il 3 perchè considera entrambi non primi; come posso risolvere, potete darmi qualche dritta

il mio codice è questo

#include <iostream>

using namespace std;

void inserisciNumero(int& n);
void verificaPrimi(int n);

int main( ){

    int numero;
    inserisciNumero(numero);
    verificaPrimi(numero);
    
    return 0;
}
void inserisciNumero(int& n){
     cout<<"inserisci il numero\n";
     cout<<"numero:   ";
     cin>>n; 
    while(n < 0 ){
        cout<<"ERRORE:valore non valido\n";
        cout<<"RIPROVA\n";
        cout<<"numero:    ";
        cin>>n;
}   
void verificaPrimi(int n){
      if((n % 2 == 0) || ( n % 3 == 0)){
         cout<<"il numero non è primo\n";
     }else{
          cout<<"il numero è primo\n";     
}

17 Risposte

  • Ma così fai primi tutti i numeri non divisibili per 2 o 3 tipo 25! Pensa a come trovare un numero primo a mente, cioè: come faresti tu senza computer ma solo con la calcolatrice? Cos'è che rende primo un numero? Poi usa questo metodo e cerca di scriverlo in modo che sia il computer ad eseguirlo e non tu
  • I numeri primi sono tutti quei numeri che si possono dividere per 1 e per se stesso

    quindi se provo a seguire questa teoria mi esce così

    if((n % 1 = 0) && (n%n == 0)){
    cout<<"il numero è primo\n";
    }else{
    cout<<"il numero non è primo\n";

    facendo così mi escono tutti primi
  • Si certo, perché non è quello che distingue un numero primo da un numero non primo. Un numero è primo se è divisibile SOLO per 1 e per sé stesso, ma tutti i numeri sono divisibili sia per 1 che per sé stessi. Quindi il metodo è un altro, che alla fine porta al risultato che gli unici divisori di quel numero sono 1 e il numero stesso
  • @Bwe scusa ... dalle elementari si sa che ogni intero, a partire da 1, è divisibile per 1 e per sé stesso, quindi quel codice che hai scritto è contro ogni logica.

    Devi DIMOSTRARE che NON SIA divisibile per i valori intermedi ! Ok ?
  • Per valori intermedi cosa intendi
  • oregon ha scritto:


    @Bwe scusa ... dalle elementari si sa che ogni intero, a partire da 1, è divisibile per 1 e per sé stesso, quindi quel codice che hai scritto è contro ogni logica.

    Devi DIMOSTRARE che NON SIA divisibile per i valori intermedi ! Ok ?
    Wow, diretto...
    In sostanza si, è quello che volevo dire. Trova un modo per dimostrare che 1 e x sono gli unici divisori di x. I valori intermedi sono i numeri interi tra 1 e x
  • Tra 2 e n-1
  • Ok provo e vi faccio sapere
  • Puoi fermare le divisioni prima di superare la radice quadrata di n
  • oregon ha scritto:


    Puoi fermare le divisioni prima di superare la radice quadrata di n
    Dando per scontato che abbia capito di dover fare delle divisioni...il divisore massimo di un numero dispari è minore o uguale alla sua radice quadrata
  • Non ho capito cosa intendi ... spiegati con un esempio ...
  • Che i numeri dispari sono divisibili al massimo per la loro radice quadrata, come hai detto tu. Infatti anche io un po' di tempo fa ho scritto una funzione per sapere se un numero è primo, ma la prima versione arrivava fino a n/2. Ma poi l'ho resa più veloce abbassando il limite alla radice quadrata
  • Non scriviamo eresie.
    Avendo a, b, q una terna di numeri non nulli (siamo nell'usuale semianello dei naturali), con a > 1, b != 1 e b != a, se b|a (b divide a) e a / b = q si ha ovviamente bq = a e dunque anche q|a: (b, q) costituiscono una coppia di divisori, più raramente indicata come "coppia complementare di divisori" in letteratura.
    Un banale teorema di teoria elementare del numero, dimostrato ad esempio qui, asserisce che per ogni possibile coppia di divisori di un numero composito, il limite superiore per il divisore minore è pari alla radice quadrata del numero dato.
    Il caso limite si ha quando il numero naturale composito è un quadrato perfetto e quindi la coppia di divisori è formata da due valori uguali tra loro e pari appunto alla radice quadrata del numero dato.
  • Allora forse ho capito male
Devi accedere o registrarti per scrivere nel forum
17 risposte