DOMANDA Numero primo

  • Autore discussione Autore discussione MPG
  • Data d'inizio Data d'inizio
Pubblicità

MPG

Utente Attivo
Messaggi
566
Reazioni
4
Punteggio
55
QUi sto dimostrando che un numero è primo mi dice errore ultima riga dove cè la } perchè manca } ma non capisco c'è..
Mi potete dire in merito? Grazie!!

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{

int divisore, numero, resto;

cout<<"Fornisci un numero: ";
cin>> numero;

divisore=2;

while (divisore<numero)
{
resto = numero%divisore;

if (resto==0)
//crivello di eratostene
{
cout<<"Il numero "<<numero<<" non e' primo\n";
}

else if (divisore == numero)
{divisore = divisore+1;
cout<<"Il numero "<<numero<<" e' primo\n ";

}
mpg
Starting Member
ranks_light1.gif

Messaggio: 20 di 21
Iscritto il: 28/11/2017, 09:35
Firefox 56.0 64 bits
Windows 10 64 bits
 
Ho messo cosi' ma nn viene ancora...

while (divisore<numero)
{
resto = numero%divisore;
}
if (resto==0)
//crivello di eratostene
{
cout<<"Il numero "<<numero<<" non e' primo\n";
// break;
}
 
Riscrivo con variazione tua:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{

int divisore, numero, resto;

cout<<"Fornisci un numero: ";
cin>> numero;

divisore=2;

while (divisore<numero)
{
resto = numero%divisore;
}
if (resto==0)
//crivello di eratostene
{
cout<<"Il numero "<<numero<<" non e' primo\n";
// break;
}

else if (divisore == numero)
{divisore = divisore+1;
cout<<"Il numero "<<numero<<" e' primo\n ";

}
 
Ciao, prima di tutto le parentesi devono essere bilanciate, ovvero ci deve essere un'eguale numero di aperte e chiuse. Manca la } finale della funzione main.
A questo proposito è molto utile scrivere indentando il codice con un tab.
Ma soprattutto non ho capito l'algoritmo che usi, viene fuori un ciclo infinito.
 
Ultima modifica:
Se metto la } che manca in effetti quando mi chiede il numero da inserire poi si blocca tutto..
In pratica tu come lo faresti?
 
Parentesi e sintassi a parte l'algoritmo è sbagliato;
intanto non vedo nessun crivello di Eratostene, in secondo luogo per decidere se un numero è primo non ce n'è bisogno,
tu stai semplicemente controllando tutti i divisori fino al numero inserito, una scelta PESSIMA.
Anche tralasciando nozioni avanzate di algebra, è completamente inutile controllare tutti i divisori:
innanzitutto qualunque numero pari, eccetto il 2, non è primo, quindi il divisore iniziale deve essere 3 (non 2);
per cui basta controllare i numeri dispari ed incrementare via via il divisore di 2 unità (così fai metà controlli);
poi c'è la faccenda del limite superiore del divisore: hai mai visto un numero che ha un divisore più grande della sua metà?
se devi controllare 101 è inutile controllare se 51, 53, 55... ecc sono divisori, al più devi controllare fino a 50 (anzi fino a 49 perché parti dal 3 e incrementi di 2);
anche metà comunque è troppo: iterando il ragionamento, se un numero N non è divisibile per 3 allora non è divisibile nemmeno per N/3... e così via.
La teoria ci dice che basta controllare tutti i divisori dispari fino alla radice quadrata intera del numero da controllare (per es. nel caso di 101 la radice è circa 10 per cui basta controllare 3,5,7,9 e siccome nessuno divide 101 allora 101 è primo). Questo va bene a patto di avere la radice quadrata intera corretta, una cosa che non è affatto scontata purtroppo, a causa dell'approssimazione dei numeri in virgola mobile
 
In seconda superiore e non sai cosa sia un numero primo? C'e' qualche carenza di matematica da parte tua, senza le conoscenze basi della matematica non e' che si possa fare molta programmazione.

Ripeto comunque quello che ti e' già stato suggerito: per favore usa il tag "code" per inserire il tuo codice, altrimenti e' illeggibile (anche perché perde la indentazione)

Problemi come le parentesi non bilanciate vengono trovati subito se usi un editore di testo che sappia interpretare i linguaggi di programmazione, tu cosa usi? Ce ne sono parecchi in giro, gratuiti, per tutte le piattaforme, per esempio Atom:

https://atom.io
 
Non intendevo che non sapevo cos'è un numero primo, ma il discorso successivo di come impostare il programma.
Inoltre no so cosa si il tag"code".
Per il programma io uso Codeblocks pe rchè indicato da usare dal prof.
 
Beh insomma certo che lo so "Un numero e' primo se e' divisibile solamente per se' stesso e per 1"
Volevo impostare che se il resto è 0 gia' risulta che non è è numero primo e avevo messo ovviamente 2 come divisore (Esempio 7:1= 7 quindi resto 0, ma io non messo 1 apposta come divisore)
Se per esempio uso il numero 7 questo è un numero primo che se diviso per 2 -3-4-5- 6 da resto diverso da 0 infine se non sono stati trovati divisori di numero inferiore il ciclo termina e il numero è primo. Adesso lo riposto migliore.
 
Ultima modifica:
Codice:
using namespace std;

int main()
    {

    int divisore, numero, resto;

    cout<<"Fornisci un numero: ";
    cin>> numero;

    divisore=2;

    while (divisore<numero)
              {
        resto = numero%divisore;

        if (resto==0)
                      {
            cout<<"Il numero "<<numero<<" non e' primo\n";
            break;
          
            }

        divisore = divisore+1;
        }
/    if (divisore == numero)
        cout<<"Il numero "<<numero<<" e' primo\n";

    system("PAUSE");
   
    }
[CODE]
 
Seguendo i suggerimenti di BAT00cent potresti fare qualcosa del genere.
Codice:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
   unsigned int n;
   unsigned int d = 3; // divisore
   bool flag = true; // per uscire dal ciclo while

   cout << "Fornisci un numero: ";
   cin >> n;
  
   if (n == 0 || n == 1) {
       cout << n << " non e' un numero primo\n";
   } else if (n == 2 || n == 3) {
       cout << n << " e' un numero primo\n";
   } else if (n % 2 == 0 && n > 2) { // se e' un numero pari > 2 non e' primo
       cout << n << " non e' un numero primo\n";
   } else { // se e' un numero dispari > 3
       while (d <= sqrt(n) && flag == true) {
           if (n % d == 0) {
               flag = false;
           }
           d += 2;
       }
       if (flag == true) {
           cout << n << " e' un numero primo\n";
       } else {
           cout << n << " non e' un numero primo\n";
       }
   }
   return 0;
}
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top