Hallo en welkom.
ik wil graag een demonstratie van een
oplossing voor onze vorige uitdaging die: was om een programma te
schrijven dat priemgetallen genereert.
En dus nogmaals, het hele punt van dit programma was om een array te gebruiken,
je wilt alles leren over arrays en doe dit door dit te doen.
Dus ik probeerde de . te beschrijven priemgetalalgoritme eerder.
Maar om het nog maar eens te noemen, je kunt controleren of een
priemgetal al dan niet een priemgetal is.
Het priemgetal betekent dat: uh, het is niet deelbaar
door een ander priemgetal.
Dus dat is het begrip algoritme waar we langs gaan.
En de reden dat is waarom het is een priemgetal is omdat elk niet-priemgetal
kan worden uitgedrukt als een veelvoud van priemfactoren.
Dus bijvoorbeeld 20 heeft de priemfactoren 2 2 en 5.
Dus door dit te weten, vertelt dit je dat priemgetallen niet deelbaar zijn
door enig ander priemgetal.
Dus dit kan helpen om een zeer efficiënte priemgetaltest.
Dus wat je kunt doen ben jij kan de
eerder gegenereerde priemgetallen controleren.
Zodat we onze eerder kunnen opslaan priemgetallen
gegenereerd in een array, en dat is hoe we kan deze informatie vinden.
Ook elk 9 priemgetal n moet hebben als een van de factoren een geheel getal dat
kleiner is dan of gelijk aan de vierkantswortel van n.
Dit betekent dus dat het alleen nodig is om te bepalen of een bepaald
geheel getal priem is door het te testen op even deelbaarheid tegen alle priemfactoren tot aan
de vierkantswortel van het gehele getal.
Dus je kunt daar stoppen en nogmaals het maakt het efficiënter.
Dit gaat opvallen in mijn innerlijke lus wanneer ik eruit
spring om te bepalen of ik geen priemgetal gevonden.
Ik spring eruit als ik mag de vierkantswortel van het gehele getal, het is
in wezen een exit-voorwaarde.
Dus laten we door en de weg gaan dat
je dat kunt controleren, is dat je gewoon p zegt gedeeld door priemgetallen is groter dan priemgetal sub-I, en we gebruiken dat in
de binnenste lus om test of de waarde van p groter is dan de
vierkantswortel van I van priemgetallen.
Dus laten we doorgaan en code ter sprake brengen blokken om te beginnen met het schrijven van code.
We gaan de basis doen maak hier een project aan.
We zullen ons project priemgetallen noemen.
Dus laten we naar
een nieuw project gaan, en laten we naar de consoletoepassing gaan.
En we gaan het priemgetallen noemen.
Zeg het volgende, we gaan niet om deze compiler te gebruiken.
ik was aan het spelen met compilers Ik wil er zeker van
zijn dat ik de juiste compiler heb gebruik gewoon de cygwin-compiler.
Dus het genereert mijn belangrijkste bronbestand, en het is leeg.
Laten we de printf kwijtraken en begin met het schrijven van wat code.
We gaan een bestand met de naam standaard stier.
Ik heb dit nog niet gedaan; Ik was mijn Booleans maken als onderstrepingstekens.
Laten we een kleine test doen, Ik wil in staat zijn om bool te doen.
Dus nu kunnen we boolen gebruiken.
Dus normaal gesproken in C89, het gegevenstype voor waar of onwaar is een onderstrepingsteken bool.
Maar je kunt eigenlijk een type hebben definitie in latere versies en in het standaard
bool-bestand naar gebruik gewoon bools en u kunt ook
true false als waarden gebruiken.
Dus we moeten er een paar maken variabelen hier eerst.
We gaan onze teller maken die we maar p. gaan noemen.
Dat wordt onze teller voor onze lus vanaf het moment
dat we van p tot 100 getallen controleren.
Dat wordt onze buitenste lus.
We gaan ook een maken variabel voor onze binnenloopteller.
Dit is waar we controleren onze vorige primeurs.
Eigenlijk zullen we het niet initialiseren hier zullen we het initialiseren in de lus.
We gaan onze array maken wat een geheel getal
van priemgetallen wordt en grootte 50.
En we gaan niet initialiseren het naar alles behalve 0 voor nu.
En dan gaan we een maken priemindex, en dit zal
ons helpen al onze even getallen over te slaan, en we gaan dat gewoon op 2 zetten.
Deze variabele gaat eigenlijk om er zeker van te zijn
dat we bij de juiste index beginnen, want we gaan om de eerste 2 cijfers hard te coderen.
Dat gaan we eerst doen.
We gaan hard coderen onze eerste 2 priemgetallen.
Dus dit is hoe we toegang kunnen krijgen tot array.
We weten hoe we een array in lijn moeten maken 10, geeft u gewoon het gegevenstype
op gevolgd door de naam en vervolgens in de vierkante haken specificeren we de maat.
En dan zijn we aan het initialiseren alles naar 0, dit is
een C99-eigenschap die we kunnen doen.
En om gegevens aan een array toe te wijzen, Ik kan gewoon de arraynaam zeggen
en vervolgens de indexwaarde.
Onthoud dat arrays op 0 zijn gebaseerd.
Dus ik ga zeggen prime sub-0.
En het eerste priemgetal wordt 2.
2 is het eerste priemgetal.
Tweede priemgetal is zal gelijk zijn aan 3.
Zo heb ik wat prime getallen
die ik eerder kan testen om extra priemgetallen te vinden.
En nu komt onze looping.
We hebben buitenste nodig voor lus die door alle getallen
van 5 tot 100 gaat.
We weten dat 4 geen priemgetal is dus ik begin pas om 5 uur.
Dus we kunnen zeggen dat 4 p gelijk is aan 5, p is kleiner dan of gelijk aan 100 en dan
gaan we even getallen overslaan.
Dus we gaan zeggen p is gelijk aan p plus 2.
We hoeven niet in cijfers te kijken, dat wordt onze buitenste lus.
En nogmaals, je zou moeten zijn testen terwijl je bezig bent.
Nu gaan we ook setten een Booleaanse variabele op die ons zal vertellen of
we hebben een priemgetal gevonden.
Dus hier kan ik bool gebruiken, en ik ga gewoon
een lokale variabele maken Boolean is prime.
Ik ga dat laten initialiseren om te zeggen is waar, want ik ga het alleen op
onwaar zetten als ik heb door de hele lijst
met eerder gegenereerde priemgetallen gegaan of Ik heb de laatste prime en zorg ervoor dat het niet
de vierkantswortel is.
Dus is prime gaat worden gelijk aan waar voor elke
iteratie van 5 tot 100 overslaan 2.
Nu gaat mijn innerlijke lus weg door al onze priemgetallen die we
eerder hebben gegenereerd.
Zorg dat we niet groter zijn geworden dan de vierkantswortel van de I.
Dus we gaan door alle de getallen totdat we bij de vierkantswortel komen, dat kan
onze x-voorwaarde zijn.
Wij gaan ook uit als we een priemgetal vinden.
Dus we gaan zeggen dat als priemgetal is is waar en we
zijn door onze limiet gegaan, wat p . wordt gedeeld door priemgetal sub-I is groter dan
of gelijk aan priemgetallen sub-I.
En dan gaan we naar plus plus I is onze regelvariabele voor de lus.
Dit is echt de sleutel tot het algoritme.
Dus we gaan proberen om vind al
onze priemgetallen van 5 tot 100 even getallen overslaan.
En dan in onze innerlijke lus, zijn we we
gaan beginnen bij 1, we gaan helemaal door totdat we ofwel set priemgetal tot waar is of we hebben onze uitgangstoestand bereikt,
wat de . is getal p gedeeld door priemgetal sub-I is groter dan priemgetal sub-I, en dat
is in wezen eindigend om onze te maken wanneer we een vierkantswortel vinden, want dat
is een andere voorwaarde van het algoritme.
Als dat onze lus is, binnen van onze lus, gaan
we daadwerkelijk controleren op priemgetallen.
De manier waarop een getal een priemgetal is deel je het door het getal.
En als je geen hebt 0, dan ben je klaar om te gaan.
Dus je kunt gewoon een p-mod doen priemgetal sub-I is gelijk aan 0.
En als dat waar is, dan
heb je geen priemgetal.
U kunt dus de Booleaans gelijk aan onwaar.
En dan is dat wat we doen voor de hele lus, want het enige wat we
doen is dat we gaan om de Boolean in te stellen op false.
En dat zal ons vertellen dat we dat niet deden zoek een priemgetal, dus
we willen p niet toevoegen aan onze priemgetal.
Oké, dus het laatste wat we moeten doen is dat we gewoon controleer of de Boolean is ingesteld op true,
als deze is ingesteld op true, dan willen we onze array invullen.
We willen het toevoegen aan de array. Zo waren toevoegen aan de arrays die we prime vinden.
Dus we zeggen gewoon priemgetallen en dan zeggen we prime-index.
Want onthoud, dit is de ware dat wordt echt vertegenwoordigd door de index voor
waar we willen plaatsen de array, dat wil zeggen dat we willen beginnen bij element 3 dat
index 2 is.
Dus we willen er zeker van zijn dat we het erin zetten de juiste plek in
de array, en we zetten het gewoon op p omdat p het priemgetal was dat we hebben gevonden omdat onthoud dat dit de buitenste for-lus is.
We proberen te controleren of dat is een priemgetal.
Wij beginnen om 5 uur.
We zeggen dat als 5 priemgetal wordt, als we kunnen naar deze nummers gaan vanaf 1 en dan vergelijken met
elke eerdere priemgetallen en als het niet deelbaar is door 0, dan zijn
we goed en dat moeten we voor alles doen.
En dan het laatste wat we wat we willen doen, is dat
we alleen die prime-index willen verhogen.
Dus de volgende keer dat we een prime vinden nummer, we zitten in de juiste index.
En dat is het.
En dit is de hele algoritme om priemgetallen te vinden.
Dus je wilt dat opslaan en bouwen het, zorg ervoor dat alles goed is om te gaan.
Waren goed.
Dus ik vind het leuk om de echte false toe te voegen waarden door standaard bool
op te nemen, vergeet dat niet.
En dan het laatste wat we wat we moeten doen, is dat we alleen
de priemgetallen hoeven uit te printen.
Dus we kunnen gewoon een simpele for-lus hebben.
En we gaan ze printen allemaal op dezelfde regel, dus we
gaan geen regelinvoer toevoegen.
Dus wat we gaan doen is we gaan onze regelvariabele
voor de lus opnieuw instellen op 0 I.
We gaan helemaal naar onze prime index, die de grootte zal zijn van
alles in de array en print het gewoon uit in een
enkele regel, procent I of d en prime sub-I.
En dan helemaal op het einde, we voegen een regelfeed toe.
Zoiets met een puntkomma.
Maar nogmaals, dingen om te doen opmerking in dit programma.
Let eerst op de inkeping, alle blokken zijn ingesprongen.
We gebruiken soms haakjes als we hebben meer dan één
verklaring in onze blokken, soms niet.
In dit if-statement online 25 hebben we geen haakjes gebruikt.
For-lussen zouden moeten worden inmiddels een beetje een tweede natuur.
Echt waar je aan wilt verdienen deze opdracht is de arrays.
Dus we maken een array met de naam primes, formaat 50 instellen, alles op 0 initialiseren.
En dan zetten we de eerste 2 elementen naar
2 en 3 en dan dit hele algoritme van 19 naar regels 32 bepalen of het een
priemgetal is door naar de array te kijken in de vorige priemgetallen.
En ook eruit springen als je bent groter dan de vierkantswortel.
En zo zie je weer veel vierkante haken hier om toegang te krijgen tot arrays
en om waarden toe te wijzen voor arrays en alles,
het is vrij eenvoudig.
Dus laten we dit bouwen en kijk wat er gebeurt.
We hebben geen waarschuwingen, geen fouten.
Als we dit uitvoeren, wat zie je dan? de output is alle priemgetallen tot
100 2 3 5 7 11 13 17 19 23 29 31 37 41 43 enzovoort.
Dat zijn allemaal priemgetallen.
En priemgetal is iets dat alleen was slechts een factor op zich.
Dat kun je door geen ander delen nummer en hebben geen rest.
Dus 97 de enige 2 factoren die ga in op dat zijn 1 en 97.
Dus weer een leuk klein snel programma.
Ik zal de oplossing bieden.
Je kunt het analyseren.
Maar nogmaals belangrijke afhaalrestaurants, alles over de arrays en ook over de standaard bool die ik
heb gebruikt, dat stelde ons in staat om Booleaanse gegevenstypen te maken
zonder het onderstrepingshoofdletter b en stelt u ook in staat om echte
valse waarden te gebruiken in plaats van 1 en 0.
Ik hoop dat dit helpt. Dank u.