Stampare numeri primi compresi tra 2 e n

di il
14 risposte

Stampare numeri primi compresi tra 2 e n

Int main(){
int divisori = 0, n, i;
printf("inserisci n \n");
scanf("%d", &n);

if(n>=2){
for(i=2;i<n;i=i+1){
if(n%i==0){
divisori=divisori+1;}
}
}
if(divisori==0){
printf("il numero e' primo \n");
}else{
printf("il numero non e' primo \n");
}

return 0;
}

devo stampare i numeri primi tra 2 e n ma come faccio?

14 Risposte

  • Re: Stampare numeri primi compresi tra 2 e n

    Il codice che hai postato cosa fa?

    P.S. il codice nel forum va tra tag CODE
  • Re: Stampare numeri primi compresi tra 2 e n

    oregon ha scritto:


    Il codice che hai postato cosa fa?

    P.S. il codice nel forum va tra tag CODE
    Il codice che ho postato dice se un numero è primo oppure no, e adesso prendendo spunto da questo devo stampare tutti i numeri primi da 2 a n ma non so da dove iniziare aiuto!
  • Re: Stampare numeri primi compresi tra 2 e n

    Barberi00 ha scritto:


    devo stampare i numeri primi tra 2 e n ma come faccio?
    Ciao Barberi00!

    Vediamo di iniziare insieme...

    Analizziamo il problema:
    La consegna ti chiede di stampare i numeri primi tra 2 e "n".
    Supponendo che n sia un numero scelto dall'utente in fase di esecuzione del programma abbiamo:
    2 (numero minimo da cui partire);
    n (numero massimo a cui arrivare).

    Analizzando meglio il testo, capiamo (visto che dobbiamo stampare i numeri primi da ... a ... ) che dobbiamo scandire tutti i numeri compresi tra questi ultimi.
    Quindi possiamo utilizzare il ciclo FOR, WHILE oppure DO WHILE.

    Utilizzando un ciclo andremo a scandire ogni numero da 2 a n.
    Successivamente (tramite IF) controlleremo se il numero è primo, se sì lo stamperemo (quindi non ci limiteremo a dire che il numero generico è primo come avevi fatto te), altrimenti passiamo a numero successivo normalmente.

    Saluti!
    Se avessi bisogno di ulteriori delucidazioni, aggiorna pure il thread
  • Re: Stampare numeri primi compresi tra 2 e n

    Shrimpy ha scritto:


    Barberi00 ha scritto:


    devo stampare i numeri primi tra 2 e n ma come faccio?
    Ciao Barberi00!

    Vediamo di iniziare insieme...

    Analizziamo il problema:
    La consegna ti chiede di stampare i numeri primi tra 2 e "n".
    Supponendo che n sia un numero scelto dall'utente in fase di esecuzione del programma abbiamo:
    2 (numero minimo da cui partire);
    n (numero massimo a cui arrivare).

    Analizzando meglio il testo, capiamo (visto che dobbiamo stampare i numeri primi da ... a ... ) che dobbiamo scandire tutti i numeri compresi tra questi ultimi.
    Quindi possiamo utilizzare il ciclo FOR, WHILE oppure DO WHILE.

    Utilizzando un ciclo andremo a scandire ogni numero da 2 a n.
    Successivamente (tramite IF) controlleremo se il numero è primo, se sì lo stamperemo (quindi non ci limiteremo a dire che il numero generico è primo come avevi fatto te), altrimenti passiamo a numero successivo normalmente.

    Saluti!
    Se avessi bisogno di ulteriori delucidazioni, aggiorna pure il thread
    Grazie per l'aiuto! Da quello che ho capito è "i" che scandisce i numeri da 2 a n con il ciclo for, ma dopo come faccio a dirgli se un numero è primo e come dovrei assegnarlo?
  • Re: Stampare numeri primi compresi tra 2 e n

    Barberi00 ha scritto:


    Grazie per l'aiuto! Da quello che ho capito è "i" che scandisce i numeri da 2 a n con il ciclo for, ma dopo come faccio a dirgli se un numero è primo e come dovrei assegnarlo?
    Per "dirgli" se un numero è primo o meno basta analizzare la definizione e tradurla in codice:
    Numero Primo: un numero primo n è un numero naturale maggiore di 1 (n>1) se n ammette come divisori solamente 1 e se stesso.
    Se questo è verificato, basterà stampare il numero.

    Iniziamo insieme!
    
    int main()
    {
          int n;
          
          // Chiedo numero massimo (n) all'utente 
          cout << "Inserire il numero massimo: ";
          cin >> n;
          
          // Calcolo, di ogni suo numero precedente, della proprietà di un numero primo
          int num;
          for (num=2; num<=n; num+=1) // num sarebbe la tua i
          {
                // Ora è il tuo turno, prova a calcolarlo e stampare il risultato
          }
    }
  • Re: Stampare numeri primi compresi tra 2 e n

    Shrimpy ha scritto:


    Barberi00 ha scritto:


    Grazie per l'aiuto! Da quello che ho capito è "i" che scandisce i numeri da 2 a n con il ciclo for, ma dopo come faccio a dirgli se un numero è primo e come dovrei assegnarlo?
    Per "dirgli" se un numero è primo o meno basta analizzare la definizione e tradurla in codice:
    Numero Primo: un numero primo n è un numero naturale maggiore di 1 (n>1) se n ammette come divisori solamente 1 e se stesso.
    Se questo è verificato, basterà stampare il numero.

    Iniziamo insieme!
    
    int main()
    {
          int n;
          
          // Chiedo numero massimo (n) all'utente 
          cout << "Inserire il numero massimo: ";
          cin >> n;
          
          // Calcolo, di ogni suo numero precedente, della proprietà di un numero primo
          int num, due = 2;
          for (num=2; num<=n; num+=due) // num sarebbe la tua i
          {
                // Ora è il tuo turno, prova a calcolarlo e stampare il risultato
          }
    }
    non devo usare il modulo n%i==0 giusto?
  • Re: Stampare numeri primi compresi tra 2 e n

    Barberi00 ha scritto:


    non devo usare il modulo n%i==0 giusto?
    Puoi usare l'operatore modulo
  • Re: Stampare numeri primi compresi tra 2 e n

    Shrimpy ha scritto:


    Barberi00 ha scritto:


    non devo usare il modulo n%i==0 giusto?
    Puoi usare l'operatore modulo
    int main(){
    	int divisori = 2, n, i;
    	printf("inserisci n \n");
    	scanf("%d", &n);
    	
    	if(n>=2){
    		for(i=2;i<n;i=i+1){
    			divisori++
    			if(divisori%i==0){
    			
    			printf("%d", divisori);
    		}
    		}
    	}
    	
    	
    	return 0;
    }
    cosa c'è che non va ora
  • Re: Stampare numeri primi compresi tra 2 e n

    Barberi00 ha scritto:


    int main(){
    	int divisori = 2, n, i;
    	printf("inserisci n \n");
    	scanf("%d", &n);
    	
    	if(n>=2){
    		for(i=2;i<n;i=i+1){
    			divisori++
    			if(divisori%i==0){
    			
    			printf("%d", divisori);
    		}
    		}
    	}
    	
    	
    	return 0;
    }
    cosa c'è che non va ora
    Ok, il tuo problema riguardo a questo codice è il ragionamento...
    Prima di tutto vorrei capire cosa è quella variabile divisori visto che non ne trovo l'utilità.
    Poi, quello che hai scritto nel ciclo for non è utile, analizziamo assieme il problema:
    siamo all'interno del ciclo for, quindi scandiremo ogni numero da (i=2) fino ad arrivare (i<n)
    il numero che sto analizzando (rappresentato dalla i) è primo?
    se si lo stampo, altrimenti no.
  • Re: Stampare numeri primi compresi tra 2 e n

    Shrimpy ha scritto:


    Barberi00 ha scritto:


    int main(){
    	int divisori = 2, n, i;
    	printf("inserisci n \n");
    	scanf("%d", &n);
    	
    	if(n>=2){
    		for(i=2;i<n;i=i+1){
    			divisori++
    			if(divisori%i==0){
    			
    			printf("%d", divisori);
    		}
    		}
    	}
    	
    	
    	return 0;
    }
    cosa c'è che non va ora
    Ok, il tuo problema riguardo a questo codice è il ragionamento...
    Prima di tutto vorrei capire cosa è quella variabile divisori visto che non ne trovo l'utilità.
    Poi, quello che hai scritto nel ciclo for non è utile, analizziamo assieme il problema:
    siamo all'interno del ciclo for, quindi scandiremo ogni numero da (i=2) fino ad arrivare (i<n)
    il numero che sto analizzando (rappresentato dalla i) è primo?
    se si lo stampo, altrimenti no.
    Si ma se usassi l'operatore di modulo del resto se n=20 appena ci sarà 3 non mi dirà che è un numero primo ma solo 5, e se invece mettessi i%i==0 non funzionerebbe quindi come faccio...devo mettere un altra variabile e farla dividere per i? In sostanza non ho capito come devo dirgli che è primo
  • Re: Stampare numeri primi compresi tra 2 e n

    Barberi00 ha scritto:


    Si ma se usassi l'operatore di modulo del resto se n=20 appena ci sarà 3 non mi dirà che è un numero primo ma solo 5, e se invece mettessi i%i==0 non funzionerebbe quindi come faccio...devo mettere un altra variabile e farla dividere per i? In sostanza non ho capito come devo dirgli che è primo
    Ok, guarda questo sito, dovresti trovare risposta a tutte le tue domande:https://www.codingcreativo.it/controllare-un-numero-primo-ciclo-while-c/.
  • Re: Stampare numeri primi compresi tra 2 e n

    Barberi.. ricomincia dal tuo primo codice e usa due cicli for, uno dentro l'altro, ovviamente con due variabili diverse. Il primo, ad esempio che usa k e che va da 2 a n e il secondo che usa i e che va da 2 a k. Imposta questi due cicli e ne riparliamo
  • Re: Stampare numeri primi compresi tra 2 e n

    oregon ha scritto:


    Barberi.. ricomincia dal tuo primo codice e usa due cicli for, uno dentro l'altro, ovviamente con due variabili diverse. Il primo, ad esempio che usa k e che va da 2 a n e il secondo che usa i e che va da 2 a k. Imposta questi due cicli e ne riparliamo
    #include <stdio.h>
    #include <stdlib.h>
    	
    int main(){
    	int divisori, n, i, k;
    	printf("inserisci n \n");
    	scanf("%d", &n);
    	
    	if(n>=2){
    		
    		for(i=2;i<n;i=i+1){
    			for(k=2;k<i;k<i){
    			if(n%i==0){
    				divisori=divisori+1;
    				if(divisori==0){
    					printf("%d \n", i);
    				}
    				
    			}
    			
    			}
    			
    			
    				
    			
    		}
    	}
    	
    	
    	return 0;
    }
    
    	
    cosi va bene? comunque ho chiesto aiuto al professore e mi ha detto che devo aggiungere un for e devo modificare qualcosa dall'esercizio iniziale quindi penso che sono sulla buona strada
  • Re: Stampare numeri primi compresi tra 2 e n

    Hai fatto al contrario ma può andare...

    Le variabili le aumenti con i++ e i++ e il modulo lo fai con i%k==0 ..
    e poi continua tu
Devi accedere o registrarti per scrivere nel forum
14 risposte