Primzahlen innerhalb eines Wertebereichs
Findet alle Primzahlen zwischen einer frei wählbaren Unter- und Obergrenze und zählt sie.
Eine Primzahl ist eine natürliche Zahl größer als 1, die sich nur durch 1 und durch sich selbst teilen lässt — die Reihe beginnt mit 2, 3, 5, 7, 11. Dieses Script, das unser User „Vollautomatisch" eingeschickt hat, bestimmt alle Primzahlen innerhalb eines frei wählbaren Wertebereichs.
Gebt einfach Untergrenze und Obergrenze des Intervalls ein und klickt auf „Absuchen". Das Script listet alle gefundenen Primzahlen auf und verrät euch zusätzlich, wie viele es in dem Bereich sind. Vertauscht ihr die beiden Grenzen aus Versehen, ist das kein Problem — sie werden automatisch getauscht. Vorbelegt ist der Bereich von 1 bis 100, in dem genau 25 Primzahlen liegen.
Primzahlen sind weit mehr als eine mathematische Spielerei: Schon Euklid bewies vor über 2000 Jahren, dass es unendlich viele von ihnen gibt, und heute beruht ein Großteil der Verschlüsselung im Internet (etwa das RSA-Verfahren) darauf, dass sich sehr große Zahlen nur mit enormem Aufwand in ihre Primfaktoren zerlegen lassen.
Mehr zum Thema findet ihr in unserem Archiv beim Script Primzahlen und bei der Primfaktorzerlegung, die eine Zahl in ihre Primfaktoren zerlegt.
Sehr große Bereiche (mehrere Millionen Zahlen) können den Browser einen Moment beschäftigen.
So funktioniert das Script
Das Script hat zwei Teile: die Hilfsfunktion istPrim(), die für eine einzelne Zahl entscheidet, ob sie eine Primzahl ist, und die Funktion pruefen(), die die beiden Grenzen einliest, das Intervall Zahl für Zahl durchläuft und die Treffer einsammelt.
function istPrim(zahl) {
if (zahl === 2 || zahl === 3) return true;
if (zahl < 2 || zahl % 2 === 0) return false;
…
}
Zuerst werden die Sonderfälle erledigt: 2 und 3 sind Primzahlen, alles unter 2 nicht. Der Modulo-Operator % liefert den Rest einer Division — zahl % 2 === 0 bedeutet also „gerade Zahl", und jede gerade Zahl außer der 2 ist durch 2 teilbar und damit keine Primzahl. Das Original gab hier 0 oder 1 zurück; die modernisierte Fassung nutzt die Wahrheitswerte true und false, die es genau dafür gibt.
const wurzel = Math.sqrt(zahl);
for (let teiler = 3; teiler <= wurzel; teiler += 2) {
if (zahl % teiler === 0) return false;
}
return true;
Das ist die eigentliche Prüfung, die sogenannte Probedivision: Die Zahl wird der Reihe nach durch alle ungeraden Teiler geteilt. Geht eine Division auf, ist die Zahl keine Primzahl. Der Clou steckt in Math.sqrt: Es genügt, bis zur Quadratwurzel zu testen — hätte eine Zahl einen Teiler oberhalb ihrer Wurzel, müsste der zugehörige Partnerteiler unterhalb der Wurzel liegen und wäre längst gefunden. Bei 997 sind so statt hunderten nur 15 Teiler zu prüfen.
if (unter > ober) {
const swop = unter;
unter = ober;
ober = swop;
}
Hat jemand die Grenzen vertauscht, hilft der klassische Dreieckstausch: Die Untergrenze wird in der Hilfsvariablen swop zwischengeparkt (der Name stammt noch aus dem Original), dann werden die Werte übers Kreuz zugewiesen.
const gefunden = [];
for (let zahl = unter; zahl <= ober; zahl++) {
if (istPrim(zahl)) gefunden.push(zahl);
}
Die Hauptschleife fragt für jede Zahl des Intervalls istPrim() und hängt Treffer mit push an das Array gefunden an. Am Ende fügt gefunden.join(", ") alle Fundstücke zu einer kommagetrennten Liste zusammen, und gefunden.length liefert die Anzahl gleich mit. Kleine Ehrenrettung der Mathematik: Das Original durchlief den Bereich in Zweierschritten und übersprang dabei ausgerechnet die 2 — die modernisierte Fassung prüft jede Zahl und zählt die 2 wieder mit.
Zum Anpassen: Das Trennzeichen der Liste ändert ihr im join(", "), den Text der Bilanzzeile direkt im Ausgabestring. Wer mag, kann die Vorbelegung der beiden Felder im HTML (value="1" und value="100") auf seinen Lieblingsbereich setzen.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Mathematik
-
5 Zahlen
-
Altersberechnungen
-
Anzahl der Stellen von Potenzen kalkulieren
-
Barrel in Liter
-
Beliebige Wurzel ziehen
-
Binomialverteilung
-
Collatz Problem
-
Denk Dir eine Zahl
-
Dezimalbruch
-
Dezimalzahl in Binärzahl umwandeln
-
Die Kamelhändler
-
Downloadzeit-Rechner
-
Drehender Kreis 1
-
Drehender Kreis 2
-
Drehender Kreis 3
-
Dreiecksrechner
-
Dreisatz
-
Dreisatz antiproportional
-
Einfacher Euro-Rechner
-
Fakultät berechnen
-
Fakultätsrechner
-
Fibonacci Reihe berechnen
-
Fibonacci-Zahlen
-
Flächenberechnung / Dreieck
-
Flächenberechnung / Kreis
-
Flächenberechnung / Parallelogramm
-
Flächenberechnung / Rechteck
-
Flächenberechnung / Trapez
-
Gedanken lesen
-
Geschwindigkeitsmesser