Mit dem Laden des Videos akzeptierst du die Datenschutzerklärung von YouTube. Wenn du die Menge an Daten reduzieren möchtest, die YouTube von dir sammelt, solltest du dich vorher aus deinem YouTube-Account ausloggen, das Speichern von Cookies für das Google-Ads-Programm deaktivieren und/oder Cookies im Browser blockieren.
YouTube immer automatisch laden
InhaltsverzeichnisAls Text lesen
Lass uns mal ein etwas größeres Beispiel besprechen: Ein Programm, das alle Primzahlen bis zu einer bestimmten Zahl berechnet.
Zur Erinnerung: Primzahlen sind alle positiven Ganzzahlen, die genau zwei unterschiedliche Teiler haben, nämlich 1 und sich selbst.
Beispiele:
7 ist eine Primzahl, weil sie nur durch die Zahlen 1 und 7 teilbar ist
10 ist keine Primzahl, weil 10 durch 1, 2, 5, und 10 teilbar ist
Die 1 selbst ist keine Primzahl, weil sie nur einen einzigen Teiler hat, nämlich 1
Um einen einfachen Algorithmus, also ein Rechenverfahren, zu entwickeln, der herausfindet, ob eine gegebene Zahl n eine Primzahl ist oder nicht, kann man folgendermaßen vorgehen:
Überprüfe, ob n kleiner ist als 2, falls ja ist n definitiv keine Primzahl
Iteriere durch alle Zahlen von 2 bis n - 1
Falls mindestens eine dieser Zahlen ein Teiler von n ist, ist n keine Primzahl
Ansonsten hat n keine Teiler zwischen 2 und n - 1 und muss daher eine Primzahl sein
a) Schreibe ein Programm, das überprüft, ob eine gegebene Zahl n eine Primzahl ist.
b) Modifiziere anschließend dein Programm so, dass es alle Primzahlen bis zu einer gewissen Zahl max (z.B. max = 100) ausgibt. (Hier reicht die Ausgabe der Zahl ohne weiteren Text.)
Mit dem Laden des Online Editors akzeptierst du die Datenschutzerklärung von JDoodle, einem Produkt der Nutpan pty Ltd (Australien). JDoodle verwendet die Tools reCAPTCHA und Google Analytics, wodurch Daten an Google übertragen werden können. Ich habe leider keinen Einfluss auf diesen Prozess. Du kannst Google Analytics über ein Browserplugin deaktivieren.
Online Editor immer automatisch laden
c) Gib alle Primzahlen von 1_000_000 bis 1_001_000 aus. Was fällt dir hinsichtlich der Ausführungsdauer auf? Wie könnte man das Problem beheben? Überlege dir hierzu, was genau in jeder Iteration passiert.
In Java lassen sich Zahlen übersichtlicher darstellen, indem man Tausender-Blöcke durch einen Unterstrich trennt:
10000 ist das gleiche wie 10_000.
Häufige Fehlerquellen
prime wurde kein initialer Wert gegeben: error: variable prime might not have been initialized
Fall für Zahlen kleiner 2 vergessen
Grenzen der for-Schleife falsch: Es muss von 2 bis n - 1 iteriert werden
prime genau falsch herum gesetzt: prime muss nur dann false sein, falls n < 2 oder es einen Teiler zwischen 2 und n - 1 gibt
Lösungsvorschlag Teilaufgabe a)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
publicclassPrimes {
publicstaticvoidmain(String[] args) {
intn=97;
// Wir nehmen erstmal an, dass n eine Primzahl ist
booleanprime=true;
if (n<2) {
// Keine Zahl kleiner 2 ist eine Primzahl
prime=false;
} else {
// Iteriere von 2 bis n - 1
for (inti=2; i<n; i++) {
// Überprüfe, ob i ein Teiler von n ist
if (n%i==0) {
/*
* n hat mindestens einen Teiler im Intervall [2, n-1]