Ciao e Benvenuto.
Vorrei fornire un file dimostrazione una soluzione
alla nostra sfida precedente che era scrivere un programma che
generasse numeri primi.
E così di nuovo, l'intero punto di questo programma è stato quello di utilizzare
un array, vuoi imparare tutto sugli array e farlo in questo modo.
Quindi ho provato a descrivere il file algoritmo dei numeri primi prima.
Ma per menzionarlo di nuovo, puoi verificare se un numero primo
è o meno un numero primo.
Il numero primo significa quello uh non è divisibile in modo
uniforme per nessun altro numero primo.
Quindi questo è l'algoritmo della nozione che stiamo per passare.
Ed è per questo che lo è un numero primo è perché qualsiasi numero intero non
primo può essere espresso come multiplo di fattori primi.
Quindi, ad esempio, 20 ha l'estensione fattori primi 2 2 e 5.
Quindi, sapendo questo, questo te lo dice che i numeri primi non sono divisibili in modo uniforme
per nessun altro numero primo.
Quindi questo può aiutare a fare molto efficiente test dei numeri primi.
Quindi quello che puoi fare sei tu può controllare i
numeri primi generati in precedenza.
Quindi possiamo memorizzare il nostro file precedente ha
generato numeri primi in un array, ed è così che noi può trovare queste informazioni.
Anche qualsiasi 9 intero primo n deve ha come uno dei suoi fattori un numero intero
minore di o uguale alla radice quadrata di n.
Quindi questo significa che è solo necessario per determinare se un dato
intero è primo testandolo per pari divisibilità contro tutti i fattori primi fino
alla radice quadrata dell'intero.
Quindi puoi fermarti qui e ancora una volta lo rende più efficiente.
Questo sarà evidente nel mio ciclo interiore quando salto fuori per
determinare se io non hanno trovato un numero primo.
Salterò fuori se ci arrivo la radice quadrata dell'intero, è essenzialmente una
condizione di uscita.
Quindi andiamo attraverso e il modo che puoi
verificare è che dici solo p diviso per numeri primi è maggiore del primo sub-I, e lo useremo nel ciclo
più interno per verifica se il valore di p supera la radice quadrata
di I. di primo.
Quindi andiamo avanti e facciamo apparire il codice blocchi per iniziare a scrivere del codice.
Faremo le basi qui, crea un progetto.
Chiameremo il nostro progetto numeri primi.
Quindi andiamo
al nuovo progetto e andiamo all'applicazione console.
E lo chiameremo numeri primi.
Dì il prossimo, non andremo per usare questo compilatore.
Ci stavo giocando compilatori voglio assicurarmi di avere il
compilatore giusto basta usare il compilatore cygwin.
Quindi sta generando il mio file principale file di origine ed è vuoto.
Liberiamoci del printf e inizia a scrivere del codice.
Includeremo un file file chiamato toro standard.
Non l'ho ancora fatto; Sono Stato creando i miei booleani come trattini bassi.
Facciamo solo un piccolo test, Voglio essere in grado di fare bool.
Quindi ora possiamo usare bool.
Quindi normalmente in C89, il tipo di dati per vero o falso è il carattere di sottolineatura bool.
Ma puoi effettivamente avere un tipo definizione nelle versioni successive e nel file bool standard
in usa solo bool e ti permette anche di
usare true false come valori.
Quindi dobbiamo crearne alcuni prima le variabili qui.
Creeremo il nostro contatore che chiameremo solo p.
Questo sarà il nostro contatore per il nostro ciclo da
quando controlliamo da p a 100 numeri.
Questo sarà il nostro anello esterno.
Creeremo anche un file variabile per il nostro contatore del ciclo interno.
Qui è dove controlliamo i nostri numeri primi precedenti.
In realtà, non lo inizializzeremo qui lo inizializzeremo nel ciclo.
Creeremo il nostro array che sarà un numero intero di numeri
primi e avrà una dimensione 50.
E non inizializzeremo a qualsiasi cosa tranne 0 per ora.
E poi creeremo un file indice primo, e questo
ci aiuterà a saltare tutti i nostri numeri pari, e lo imposteremo solo a 2.
Questa variabile sta effettivamente andando per assicurarci di
iniziare con l'indice corretto perché stiamo andando per codificare i primi 2 numeri.
Questo è quello che faremo prima.
Stiamo andando a codificare i nostri primi 2 numeri primi.
Quindi è così che possiamo accedere all'array.
Sappiamo come creare un array in linea 10, devi solo specificare il tipo di
dati seguito dal nome e quindi nel file parentesi quadre specifichiamo la dimensione.
E poi stiamo inizializzando tutto a 0, questo è un
tratto C99 che possiamo fare.
E per assegnare dati a un array, Posso solo dire il nome dell'array e
quindi il valore dell'indice.
Ricorda, gli array sono basati su 0.
Quindi dirò prime sub-0.
E il primo numero primo sarà 2.
2 è il primo numero primo.
Il secondo numero primo è sarà uguale a 3.
In questo modo ho del primo
numeri che posso testare in precedenza per trovare numeri primi aggiuntivi.
E ora arriva il nostro looping.
Avremo bisogno di esterno per ciclo che attraversa tutti i
numeri da 5 a 100.
Sappiamo che 4 non è un numero primo quindi ho appena iniziato a 5.
Quindi possiamo dire che 4 p è uguale a 5, p è minore o uguale a 100 e quindi
salteremo i numeri pari.
Quindi diremo p è uguale a p più 2.
Non abbiamo bisogno di guardare in nessun numero, questo sarà il nostro anello esterno.
E ancora, dovresti esserlo testare mentre procedi.
Ora stiamo anche per impostare su una variabile booleana che ci dirà se
abbiamo trovato un numero primo.
Quindi qui è dove posso usare bool, e creerò solo
una variabile locale Boolean è primo.
Lo farò inizializzare dire è vero perché lo imposterò su falso solo se lo
avrò passato attraverso l'intero elenco di numeri primi generati
in precedenza o Sono arrivato all'ultimo numero primo e mi assicuro che non sia la
radice quadrata.
Quindi sarà il primo uguale a true per ogni iterazione
da 5 a 100 saltando 2.
Ora il mio ciclo interiore se ne andrà attraverso tutti i nostri numeri primi che
abbiamo generato in precedenza.
Fai in modo che non siamo andati più grandi rispetto alla radice quadrata di I.
Quindi esamineremo tutto i numeri fino ad arrivare alla radice quadrata, che può essere la
nostra condizione x.
Stiamo anche per uscire se abbiamo trovato un numero primo.
Quindi diremo se è primo è vero e abbiamo superato
il nostro limite, che sarà p diviso per primi sub-I è maggiore o
uguale ai primi sub-I.
E poi andremo a plus plus I è la nostra variabile di controllo del ciclo.
Questo è davvero il file chiave dell'algoritmo.
Quindi proveremo a farlo trova tutti i nostri
numeri primi da 5 a 100 saltando i numeri pari.
E poi nel nostro ciclo interiore, siamo cominceremo da
1, andremo fino in fondo finché non avremo impostato è primo su true o abbiamo raggiunto la nostra condizione di
uscita, che è il il numero p diviso per primo sub-I è maggiore di primo sub-I,
e questo è essenzialmente finendo per fare il nostro quando troviamo una radice quadrata
perché questo è un'altra condizione dell'algoritmo.
Se questo è il nostro ciclo, dentro del nostro ciclo,
controlleremo effettivamente i numeri primi.
Il modo in cui un numero è primo lo dividi per il numero.
E se non hai un file 0, allora sei a posto.
Quindi puoi semplicemente fare un mod p primo sub-I è uguale a 0.
E se questo è vero, allora non
hai un numero primo.
Quindi puoi impostare il file Booleano uguale a false.
E poi è quello che facciamo per l'intero ciclo perché tutto ciò che
stiamo facendo è andare per impostare il valore booleano su false.
E questo ci dirà che non l'abbiamo fatto trova un numero primo, quindi non vogliamo
aggiungere p al nostro array di numeri primi.
Ok, quindi l'ultima cosa da fare è solo noi controlla se il booleano è stato impostato su true,
se è stato impostato su true, allora vogliamo riempire il nostro array.
Vogliamo aggiungerlo all'array. Così erano aggiungendo agli array troviamo prime.
Quindi diciamo solo numeri primi e allora diciamo indice primo.
Perché, ricorda, questo è quello giusto che è realmente rappresentato dall'indice
per dove vogliamo inserire l'array, che è che vogliamo iniziare dall'elemento 3 che
è l'indice 2.
Quindi vogliamo essere sicuri di inserirlo il punto giusto nell'array, e lo abbiamo
impostato su p perché p era il numero primo che abbiamo trovato perché ricordiamo che questo è il ciclo for esterno.
Stiamo cercando di controllare se questo è un numero primo.
Partiamo dalle 5.
Diciamo che se 5 sarà primo, se possiamo andare a questi numeri che iniziano da 1 e poi confrontare
con qualsiasi numeri primi precedenti e se non è divisibile per 0, allora
siamo a posto e dobbiamo farlo per tutto.
E poi l'ultima cosa noi vogliamo solo
incrementare quell'indice principale.
Quindi la prossima volta che troviamo un numero primo numero, siamo nell'indice corretto.
E questo è tutto.
E questo è l'intero algoritmo per trovare i numeri primi.
Quindi vuoi salvarlo e costruire assicurati che sia tutto a posto.
Erano buoni.
Quindi mi piace aggiungere il vero falso valori includendo bool
standard, non dimenticartene.
E poi l'ultima cosa noi non resta che stampare
i numeri primi.
Quindi possiamo solo avere un semplice ciclo for.
E li stamperemo tutto sulla stessa riga, quindi non aggiungeremo
un avanzamento riga.
Quindi quello che faremo è reistituiremo la nostra variabile
di controllo del ciclo a 0 I.
Andremo fino al nostro indice primo, che sarà la dimensione
di ogni cosa nell'array e stampalo in una singola
riga, percentuale I od e primo sub-I.
E poi alla fine aggiungeremo un avanzamento riga.
Qualcosa del genere con un punto e virgola.
Ma ancora una volta, cose da fare avviso in questo programma.
Innanzitutto, nota il rientro, tutti i blocchi sono rientrati.
A volte usiamo parentesi quadre quando lo facciamo abbiamo più di una
dichiarazione all'interno dei nostri blocchi, a volte no.
In questa dichiarazione if on line 25, non abbiamo utilizzato parentesi.
For loops dovrebbe diventare un po 'una seconda natura ormai.
Davvero quello da cui vuoi guadagnare questa assegnazione sono gli array.
Quindi stiamo creando un array chiamato numeri primi, impostandone la dimensione 50, inizializzando tutto a 0.
E poi stiamo impostando il primo 2
elementi a 2 e 3 e poi l'intero algoritmo da 19 a le righe
32 determinano se è primo guardando l'array nei numeri primi precedenti.
E anche saltare fuori quando sei maggiore della radice quadrata.
E così di nuovo ne vedi molto parentesi quadre qui per accedere agli array
e per assegnare i valori agli array e tutto il
resto, è piuttosto semplice.
Quindi costruiamolo e vedere cosa succede.
Non abbiamo avvisi, né errori.
Se eseguiamo questo, quello che vedi è l'output di tutti i numeri primi a 100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 e così via.
Sono tutti numeri primi.
E il numero primo è qualcosa che solo era solo un fattore di se stesso.
Non puoi dividerlo per nessun altro numero e non hanno resto.
Quindi 97 gli unici 2 fattori che vai in quello sono 1 e 97.
Quindi di nuovo un bel programma veloce.
Fornirò la soluzione.
Puoi analizzarlo.
Ma ancora una volta punti chiave, tutto sugli array e anche sul bool standard che
ho usato, quello ci ha permesso di creare tipi di dati
booleani senza il carattere di sottolineatura be consente anche di utilizzare
valori veri e falsi invece di 1 e 0.
Spero che sia di aiuto. Grazie.