DOMANDA Numero primo

MPG

Utente Attivo
544
4
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
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,470
11,520
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
manca la } che chiude il while
 

MPG

Utente Attivo
544
4
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;
}
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,470
11,520
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
puoi postare tutto il codice col tag codice??
 

MPG

Utente Attivo
544
4
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 ";

}
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
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:

MPG

Utente Attivo
544
4
Se metto la } che manca in effetti quando mi chiede il numero da inserire poi si blocca tutto..
In pratica tu come lo faresti?
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,964
11,589
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
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
 

Andretti60

Utente Èlite
6,440
5,091
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
 

MPG

Utente Attivo
544
4
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.
 

MPG

Utente Attivo
544
4
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:

MPG

Utente Attivo
544
4
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]
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
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:

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili