Esercizio Matlab: numeri primi
Sera! mi è stato assegnato il primo esercizio da fare da sola su MATLAB e sono un pò in difficoltà..
In pratica, devo scrive un programma che mi dia i numeri primi da 1 a 100, per semplicità un suggerimento è quello di usare il crivello di Eratostene.
In pratica quello che devo fare io è, prima di tutto mi scrivo i numeri da 1 a 100 e lo posso fare così: i=1:1:100;
giusto? ma il passo che faccio da 1 a 100 ce lo devo sempre mettere?
A questo punto devo eliminare prima i multipli di 2, poi i multipli di 3, i multipli di 5 ed infine i multipli di 7 per poi infine farmi uscire i numeri primi che vanno da 1 a 100..
Sto provando già da un pò a scrivere qualcosa su Matlab ma senza alcun risultato..ho provato ad usare il ciclo while
qualche idea o suggerimento?
In pratica, devo scrive un programma che mi dia i numeri primi da 1 a 100, per semplicità un suggerimento è quello di usare il crivello di Eratostene.
In pratica quello che devo fare io è, prima di tutto mi scrivo i numeri da 1 a 100 e lo posso fare così: i=1:1:100;
giusto? ma il passo che faccio da 1 a 100 ce lo devo sempre mettere?
A questo punto devo eliminare prima i multipli di 2, poi i multipli di 3, i multipli di 5 ed infine i multipli di 7 per poi infine farmi uscire i numeri primi che vanno da 1 a 100..
Sto provando già da un pò a scrivere qualcosa su Matlab ma senza alcun risultato..ho provato ad usare il ciclo while
qualche idea o suggerimento?
Risposte
Ciao, sicuramente ci sono più modi (più o meno efficienti) per scrivere un programma di questo tipo, ora mi viene in mente questo: utilizzando un ciclo for scorri tutti i numeri che ti interessano e per ogni numero considerato provi a valutare se è multiplo di qualche suo predecessore utilizzando un altro ciclo for. Se il numero è primo lo salvi in un vettore altrimenti lo scarti.
In pratica il mio suggerimento è quello di usare due cicli for annidati
In pratica il mio suggerimento è quello di usare due cicli for annidati

Mmmm ok allora quello che devo fare è prima di tutto è di definire:
n=100;
i= 1:n;
da qui, devo quindi riuscire a scrivere un ciclo for che mi scorri tutti i numeri da 1 ad n, giusto?... all'interno dello stesso ciclo for però, ci deve essere un ulteriore ciclo che mi dica se è un multiplo di un predecessore
alla fine dunque dovrò avere un vettore formato da tutti i primi da 1 a 100?
n=100;
i= 1:n;
da qui, devo quindi riuscire a scrivere un ciclo for che mi scorri tutti i numeri da 1 ad n, giusto?... all'interno dello stesso ciclo for però, ci deve essere un ulteriore ciclo che mi dica se è un multiplo di un predecessore
alla fine dunque dovrò avere un vettore formato da tutti i primi da 1 a 100?
si il procedimento è questo, però se 100 è un valore costante puoi creare subito il ciclo invece di dichiarare altre variabili
dove al posto dei puntini metti l'istruzione che controlla se il numero i è multiplo o meno del numero j
for i=1:100 for j=1:i ... end end
dove al posto dei puntini metti l'istruzione che controlla se il numero i è multiplo o meno del numero j
mm capito! comunque, io mi posso dichiarare un'altra variabile, es: v=2:n-1;
e nell'istruzione se il resto di j*v è zero allora gli dico di stampare quel valore uguale a zero? ..
e nell'istruzione se il resto di j*v è zero allora gli dico di stampare quel valore uguale a zero? ..