Hallo und herzlich willkommen.
Ich möchte eine zur Verfügung stellen Demonstration
einer Lösung für unsere bisherige Herausforderung, die war ein Programm zu
schreiben, das Primzahlen generiert.
Und so wieder der springende Punkt Von diesem Programm war es, ein Array zu verwenden,
man möchte alles lernen über Arrays und tun Sie dies auf diese Weise.
Also habe ich versucht das zu beschreiben Primzahl-Algorithmus vor.
Aber um es noch einmal zu erwähnen, Sie können überprüfen, ob eine
Primzahl eine Primzahl ist oder nicht.
Die Primzahl bedeutet das Es ist nicht gleichmäßig durch
eine andere Primzahl teilbar.
Das ist also der Begriff Algorithmus dass wir vorbeigehen werden.
Und der Grund, warum es so ist Eine Primzahl ist, weil jede Nicht-Primzahl-Ganzzahl
ausgedrückt werden kann als ein Vielfaches von Primfaktoren.
So hat zum Beispiel 20 die Primfaktoren 2 2 und 5.
Wenn du das weißt, sagt dir das dass Primzahlen durch keine andere
Primzahl gleichmäßig teilbar sind.
Das kann also helfen, ein sehr zu machen effizienter Primzahlentest.
Was Sie also tun können, sind Sie kann die
zuvor generierten Primzahlen überprüfen.
So können wir unsere bisher speichern
Primzahlen in einem Array generiert, und so haben wir kann diese Informationen finden.
Auch jede 9 Primzahl n muss haben als einen ihrer Faktoren eine ganze Zahl, die
kleiner als oder ist gleich der Quadratwurzel von n.
Das bedeutet also, dass es nur notwendig ist Um festzustellen, ob eine bestimmte
Ganzzahl eine Primzahl ist, testen Sie sie auf gerade Teilbarkeit gegen alle Primfaktoren bis
zur Quadratwurzel der ganzen Zahl.
So können Sie genau dort anhalten und wieder macht es effizienter.
Dies wird sich bemerkbar machen in meiner inneren Schleife, wenn ich
herausspringe, um festzustellen, ob ich habe keine Primzahl gefunden.
Ich werde herausspringen, wenn ich dazu komme Die Quadratwurzel der ganzen Zahl ist
im Wesentlichen eine Ausgangsbedingung.
Also lasst uns durchgehen und den Weg gehen Das
können Sie überprüfen, indem Sie einfach p geteilt durch Primzahlen sagen ist größer als Prime Sub-I, und wir werden das in
der innersten Schleife verwenden Testen Sie, ob der Wert von p die Quadratwurzel
von Prim I überschreitet.
Lassen Sie uns also fortfahren und Code aufrufen Blöcke, um mit dem Schreiben von Code zu beginnen.
Wir werden die Grundlagen machen Erstellen Sie hier ein Projekt.
Wir werden unser Projekt Primzahlen nennen.
Gehen wir
also zu einem neuen Projekt und zur Konsolenanwendung.
Und wir werden es Primzahlen nennen.
Sagen Sie als nächstes, wir gehen nicht um diesen Compiler zu verwenden.
Ich habe rumgespielt Compiler Ich möchte sicherstellen, dass ich den
richtigen Compiler habe Verwenden Sie einfach den Cygwin-Compiler.
Also generiert es mein Haupt Quelldatei, und es ist leer.
Lassen Sie uns den printf loswerden und fange an, Code zu schreiben.
Wir werden a einschließen Datei namens Standard Bull.
Ich habe das noch nicht getan. Ich war Erstellen meiner Booleschen Werte als Unterstriche.
Lass uns einfach einen kleinen Test machen, Ich möchte in der Lage sein, Bool zu machen.
Jetzt können wir also Bools verwenden.
Also normalerweise in C89 der Datentyp für wahr oder falsch ist unterstrichen bool.
Aber Sie können tatsächlich einen Typ haben Definition in späteren Versionen und in der Standard-Bool-Datei
zu Verwenden Sie einfach Bools und können Sie auch
true false als Werte verwenden.
Also müssen wir welche schaffen Variablen hier zuerst.
Wir werden unseren Zähler erstellen was wir nur p nennen werden.
Das wird unser Zähler sein für unsere Schleife ab dem Zeitpunkt, an
dem wir von p auf 100 Zahlen prüfen.
Das wird unsere äußere Schleife sein.
Wir werden auch eine erstellen Variable für unseren inneren Schleifenzähler.
Hier überprüfen wir unsere vorherigen Primzahlen.
Eigentlich werden wir es nicht initialisieren hier werden wir es in der Schleife initialisieren.
Wir werden unser Array erstellen Das wird eine ganze Zahl von Primzahlen
sein und es wird Größe 50 sein.
Und wir werden nicht initialisieren es auf alles andere als 0 für jetzt.
Und dann werden wir eine erstellen Primindex, und dies wird
uns helfen, alle unsere geraden Zahlen zu überspringen, und Wir werden das nur auf 2 setzen.
Diese Variable geht tatsächlich um sicherzustellen, dass wir
am richtigen Index beginnen, weil wir gehen die ersten 2 Zahlen hart zu codieren.
Das werden wir zuerst tun.
Wir werden hart codieren unsere ersten 2 Primzahlen.
So können wir also auf das Array zugreifen.
Wir wissen, wie man ein Array in einer Linie erstellt In 10 geben Sie einfach den Datentyp
an, gefolgt vom Namen und dann in der eckige Klammern geben wir die Größe an.
Und dann initialisieren wir Alles auf 0, dies ist ein
C99-Merkmal, das wir tun können.
Und um einem Array Daten zuzuweisen, Ich kann nur den Array-Namen und
dann den Indexwert sagen.
Denken Sie daran, dass Arrays auf 0 basieren.
Also werde ich Prime Sub-0 sagen.
Und die erste Primzahl wird 2 sein.
2 ist die erste Primzahl.
Zweite Primzahl ist gleich 3 sein.
Auf diese Weise habe ich einige Prime
Zahlen, die ich zuvor testen kann, um zusätzliche Primzahlen zu finden.
Und jetzt kommt unsere Schleife.
Wir werden äußere für brauchen Schleife, die alle Zahlen
von 5 bis 100 durchläuft.
Wir wissen, dass 4 keine Primzahl ist Ich fange gerade erst um 5 an.
Wir können also sagen, dass 4 p gleich 5 ist, p ist kleiner oder gleich 100 und dann
überspringen wir gerade Zahlen.
Also werden wir sagen p ist gleich p plus 2.
Wir müssen nicht in Zahlen suchen, Das wird unsere äußere Schleife sein.
Und wieder solltest du sein Testen, während Sie gehen.
Jetzt werden wir auch setzen eine boolesche Variable, die uns sagt, ob oder nicht
Wir haben eine Primzahl gefunden.
Also hier kann ich bool verwenden, und ich werde nur
eine lokale Variable erstellen. Boolean is prime.
Ich werde das initialisieren lassen zu sagen ist wahr, weil ich es nur dann auf falsch setzen
werde, wenn ich es getan habe ging die gesamte Liste
der zuvor erzeugten Primzahlen durch oder Ich bin auf dem neuesten Stand und stelle sicher, dass es nicht
die Quadratwurzel ist.
So wird Prime sein gleich true für jede Iteration von
5 bis 100, wobei 2 übersprungen wird.
Jetzt wird meine innere Schleife gehen durch alle unsere Primzahlen, die wir
zuvor generiert haben.
Machen Sie, dass wir nicht größer geworden sind als die Quadratwurzel des I.
Also werden wir alles durchgehen Die Zahlen, bis wir zur Quadratwurzel kommen, können
unsere x-Bedingung sein.
Wir werden auch gehen wenn wir eine Primzahl gefunden haben.
Also werden wir sagen, ob es Prime ist ist wahr und
wir haben unser Limit überschritten, das p sein wird geteilt durch Primzahl Sub-I ist
größer oder gleich Primzahlen Sub-I.
Und dann werden wir plus plus Ich bin unsere Regelungsvariable.
Das ist wirklich das Schlüssel zum Algorithmus.
Also werden wir es versuchen Finden Sie alle unsere
Primzahlen von 5 bis 100, wobei Sie gerade Zahlen überspringen.
Und dann sind wir in unserer inneren Schleife Wenn wir
bei 1 beginnen, werden wir den ganzen Weg gehen, bis wir entweder gesetzt haben ist Prime to True oder wir haben unsere Ausgangsbedingung
erreicht, nämlich die Die Zahl p geteilt durch die Primzahl I ist größer als die Primzahl I, und
das ist es im Wesentlichen enden, um unsere zu machen, wenn wir eine Quadratwurzel finden, weil
das ist eine andere Bedingung des Algorithmus.
Wenn das unsere Schleife ist, drinnen In unserer Schleife werden
wir tatsächlich nach Primzahlen suchen.
Die Art und Weise, wie eine Zahl eine Primzahl ist Teilen Sie es durch die Zahl.
Und wenn Sie keine haben 0, dann kannst du loslegen.
Du kannst also einfach einen p-Mod machen Prime Sub-I ist gleich 0.
Und wenn das stimmt, dann
haben Sie keine Primzahl.
So können Sie die einstellen Boolean gleich false.
Und dann machen wir das auch für die gesamte Schleife, weil wir
nur gehen um den Booleschen Wert auf false zu setzen.
Und das wird uns sagen, dass wir es nicht getan haben Suchen Sie eine Primzahl,
damit wir unserem Primzahlenarray kein p hinzufügen können.
Okay, das Letzte, was wir tun müssen, ist, dass wir es einfach tun Überprüfen Sie, ob der Boolesche Wert auf true
gesetzt wurde. Wenn er auf true gesetzt wurde, möchten wir unser Array ausfüllen.
Wir wollen es dem Array hinzufügen. Also sind wir Hinzufügen zu den Arrays finden wir prime.
Also sagen wir einfach Primzahlen und dann sagen wir Prime Index.
Denn denken Sie daran, dies ist derjenige Das wird wirklich durch den Index
dargestellt, in den wir einfügen möchten das Array, das wir bei Element 3 beginnen wollen, das
Index 2 ist.
Also wollen wir sicherstellen, dass wir es einsetzen die richtige Stelle im Array,
und wir haben es einfach auf p gesetzt, weil p die Primzahl war, die Wir haben festgestellt, dass dies die äußere for-Schleife ist.
Wir versuchen zu überprüfen, ob Das ist eine Primzahl.
Wir beginnen um 5 Uhr.
Wir sagen, wenn 5 Primzahl sein wird, wenn Wir können zu diesen Zahlen gehen, die bei 1 beginnen, und sie dann
mit allen vergleichen vorherige Primzahlen und wenn es nicht durch 0 teilbar ist, dann
sind wir gut und das müssen wir für alles tun.
Und dann das Letzte, was wir Wir wollen
nur diesen Primindex erhöhen.
Also das nächste Mal finden wir eine Primzahl Nummer, wir sind im richtigen Index.
Und das ist alles.
Und das ist das Ganze Algorithmus zum Finden von Primzahlen.
Also willst du das speichern und bauen Stellen Sie sicher, dass alles in Ordnung ist.
Es ist alles in Ordnung.
Also mag ich es, das wahre Falsche hinzuzufügen Werte durch Einbeziehen von Standard-Bool,
vergessen Sie das nicht.
Und dann das Letzte, was wir Wir müssen nur
die Primzahlen ausdrucken.
Wir können also einfach eine einfache for-Schleife haben.
Und wir werden sie drucken alle in derselben Zeile, daher werden
wir keinen Zeilenvorschub hinzufügen.
Also werden wir tun Wir werden unsere
Regelkreisvariable erneut auf 0 I instanziieren.
Wir werden den ganzen Weg zu unserem gehen Primindex, der die Größe von
allem im Array sein wird und drucken Sie es einfach in einer
einzigen Zeile aus, Prozent I oder d und Prim-Sub-I.
Und dann ganz am Ende, Wir werden einen Zeilenvorschub hinzufügen.
So etwas mit einem Semikolon.
Aber nochmal Dinge zu Beachten Sie in diesem Programm.
Beachten Sie zuerst die Einrückung, Alle Blöcke sind eingerückt.
Wir verwenden manchmal Klammern, wenn wir haben mehr als eine
Aussage in unseren Blöcken, manchmal nicht.
In dieser if-Anweisung online 25, wir haben keine Klammern verwendet.
Für Schleifen sollte werden mittlerweile etwas zweite natur.
Wirklich, wovon Sie profitieren möchten Diese Zuordnung sind die Arrays.
Also erstellen wir ein Array namens Primzahlen. Stellen Sie die Größe 50 ein und initialisieren Sie alles auf 0.
Und dann setzen wir den ersten 2 Elemente zu
2 und 3 und dann dieser ganze Algorithmus von 19 zu Die Zeilen 32 bestimmen anhand des
Arrays, ob es sich um eine Primzahl handelt in den vorherigen Primzahlen.
Und auch rausspringen, wenn du bist größer als die Quadratwurzel.
Und so sieht man wieder viel eckige Klammern hier, um auf Arrays
zuzugreifen und Werte zuzuweisen Für Arrays und alles
ist es ziemlich einfach.
Also lasst uns das bauen und sehen, was passiert.
Wir haben keine Warnungen, keine Fehler.
Wenn wir das ausführen, was sehen Sie? Die Ausgabe erfolgt über alle Primzahlen bis 100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 und so weiter.
Das sind alles Primzahlen.
Und Primzahl ist etwas, das nur war nur ein Faktor von sich.
Das kann man nicht durch andere teilen Nummer und haben keinen Rest.
Also 97 die einzigen 2 Faktoren, die Gehen Sie darauf ein, sind 1 und 97.
Also nochmal ein schönes kleines schnelles Programm.
Ich werde die Lösung bereitstellen.
Sie können es analysieren.
Aber wieder wichtige Imbissbuden, alles über die Arrays und auch den Standard-Bool, den ich
verwendet habe, das erlaubte uns, boolesche Datentypen ohne den Unterstrich
zu erstellen b und ermöglicht es Ihnen auch, wahre falsche Werte
im Gegensatz zu 1 und 0 zu verwenden.
Hoffe das hilft. Vielen Dank.