[RISOLTO] Numeri primi.

di il
2 risposte

[RISOLTO] Numeri primi.

Mi dite cosa c'è di sbagliato?

#include <iostream>
#include <cmatch>

using namespace std;

int main()
{

cout <<Enter a number:\n";
int n;
cin >> n;
int c = 2;
int k = (int)sqrt(n);
int r = n % c;

                            while (c <= k)
                            {
                            if ( r == 0)
                            cout <<"n is not prime.\n";
                            else
                            c++;
                            }
return 0;
}
Allora il programma dovrebbe stampare se un numero è primo o meno.Adesso voglio vedere se stampa almeno i numeri NON primi. Ho provato a metterci 9 ma non mi stampa nulla, quando dovrebbe stampare che non è primo.
Vorrei che il ciclo si fermasse finchè non ha raggiunto il numero k e poi uscire e stampare "n is prime"
Mi spiego meglio: ad esempio, inserisco 17 la parte intera delle radice quadrata di 17 è uguale a 4. Quindi partendo da 2 , il resto della divisione tra 17 e 2 è diverso da zero, quindi aumento c che ora è uguale a 3. Il resto della divisione tra 17 e 3 è diverso da zero, quindi aumento c che ora è uguale a 4. Il resto della divisione tra 17 e 4 è diverso da zero. Ora che c(4) <= k(4) voglio che esca dal ciclo e scriva che il numero 17 non è primo.
Come faccio?

Grazie delle eventuali risposte.

2 Risposte

  • Re: [RISOLTO] Numeri primi.

    Intanto potresti fare una verifica iniziale per vedere se il numero è minore di 4, se lo è allora è primo, altrimenti procedi con la verifica vera e propria eseguendo i moduli coi numeri che vanno da 2 alla radice di n , dove n è il numero da verificare. tornando invece al tuo problema, se vedi bene la 'r' non viene aggiornata nel ciclo.
  • Re: [RISOLTO] Numeri primi.

    Si infatti ho visto che non viene aggiornata, in pratica non esegue l'istruzione "c++".

    Cmq ho cambiato così ma va in loop (scrivo solo la parte del while):
    
    while (c <= k)
    {
    r = n % c;
    if ( r == 0)
    cout << "n is not prime.\n";
    else
    c++;
    }
    
    Forse così funziona ma scrive all'infinito "n is not prime" , se il numero in questione NON è primo.

    Ho aggiungo fuori dal ciclo:
    
    while (..)
    {
    ...
    }
    
    cout <<"n is prime.\n";
    return 0;
    }
    
    Ho fatto una prova col 17 e mi stampa che è primo.

    Grazie delle risposta
Devi accedere o registrarti per scrivere nel forum
2 risposte