Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt

P

Poxi

Neues Mitglied
Hey
Ich bin Java Anfänger und soll die Methode primCalcMeasure programmieren mit dem Eingangsparameter n.
Es soll dann ausgegeben werden wie viele Primzahlen es zwischen 2 und n gibt. (Aber nicht welche, nur die Anzahl)
Ich habe auch schon eine Methode isPrim die prüft ob eine Zahl eine Primzahl ist.
Danke schonmal für die hilfreichen Antworten :)
 
H

httpdigest

Top Contributor
Dann darfst du gerne diese isPrim() Methode benutzen, um den Rest auch noch zu programmieren. :)

Es ist halt erstmal relativ sinnfrei, nur zu sagen "Hey, ich bin Anfänger und soll XYZ machen."
Da wirst du dann entweder die Antwort bekommen:
- "Ja, dann mach das doch."; oder
- "Und wo ist jetzt die Frage?" bzw. "Was ist denn das Problem dabei?"
 
Bible Man

Bible Man

Mitglied
Ein alternativer Vorschlag:

Anzahl Primzahlen:
  public static int primCalcMeasure(int n) {
    // 1 abziehen, da die Zahl 1 keine Primzahl ist
    int anz = n - 1;
    // Ordinalzahlen repräsentieren die nat. Zahlen von 1 bis n
    boolean[] nat = new boolean[n + 1];
    // Prüfe jede Zahl ab 2
    for (int i = 2; i <= n; ++i) {
      // Falls die Zahl nicht gestrichen ist
      if (!nat[i]) {
        // Prüfe jedes Vielfache einer Zahl
        for (int j = i; j <= n / i; ++j) {
          // Falls die Zahl nicht gestrichen ist
          if (!nat[i * j]) {
            // streiche die Zahl, da sie ein Vielfaches einer anderen außer 1 ist (daher keine Primzahl)
            nat[i * j] = true;
            --anz;
          }
        }
      }
    }
    return anz;
  }
 
H

httpdigest

Top Contributor
Okay, wenn wir jetzt wieder mal gleich Lösungen posten, dann kann man sogar noch optimieren:
- in der äusseren Schleife nur bis wurzel(n) gehen
- BitSet mit nextClearBit verwenden, um nächste noch nicht markierte Zahl zu finden:
Java:
public static int numPrimes(int n) {
  java.util.BitSet notPrime = new java.util.BitSet(n);
  int sqrtN = (int) Math.sqrt(n);
  int primeCount = n - 1;
  for (int i = 2; i <= sqrtN; i = notPrime.nextClearBit(i + 1)) {
    for (int j = i * i; j <= n; j += i) {
      if (!notPrime.get(j)) {
        notPrime.set(j, true);
        primeCount--;
      }
    }
  }
  return primeCount;
}

// Test
public static void main(String[] args) {
  System.out.println(numPrimes(15485863)); // <- 1000000
}
 
temi

temi

Top Contributor
Ein alternativer Vorschlag
Ich würde dennoch dazu raten, auf den Vorschlag von @httpdigest einzugehen. Du hast bereits eine Methode, die dir sagt, ob eine Zahl prim ist oder nicht. Das macht die Aufgabe ganz leicht. Grob gesagt:

Gehe durch alle Zahlen von 2 bis n und prüfe jede Zahl, ob sie prim ist. Wenn die Zahl prim ist, dann erhöhe einen Zähler um 1. Am Ende gib den Wert des Zählers zurück.
 
Bible Man

Bible Man

Mitglied
Okay, wenn wir jetzt wieder mal gleich Lösungen posten, dann kann man sogar noch optimieren:
- in der äusseren Schleife nur bis wurzel(n) gehen
- BitSet mit nextClearBit verwenden, um nächste noch nicht markierte Zahl zu finden:
Java:
public static int numPrimes(int n) {
  java.util.BitSet notPrime = new java.util.BitSet(n);
  int sqrtN = (int) Math.sqrt(n);
  int primeCount = n - 1;
  for (int i = 2; i <= sqrtN; i = notPrime.nextClearBit(i + 1)) {
    for (int j = i * i; j <= n; j += i) {
      if (!notPrime.get(j)) {
        notPrime.set(j, true);
        primeCount--;
      }
    }
  }
  return primeCount;
}

// Test
public static void main(String[] args) {
  System.out.println(numPrimes(15485863)); // <- 1000000
}
Danke für die Optimierung! Aber ist was verkehrt daran Lösungen zu posten? Von denen kann man doch auch lernen.
 
temi

temi

Top Contributor
Aber ist was verkehrt daran Lösungen zu posten? Von denen kann man doch auch lernen.
Generell ist daran nichts verkehrt, aber es hilft dem Fragesteller häufig deutlich mehr, wenn er durch ein paar hilfreiche Tipps selbst auf die Lösung kommt. In seinem Fall hatte er ja die Hauptaufgabe isPrime() bereits und es fehlte nur noch eine Kleinigkeit.

Dann kommt es halt noch auf den Umgang mit der Lösung an. Einfach copy & paste und fertig ist die Hausaufgabe oder wirklich mit der Lösung beschäftigen?
 
mihe7

mihe7

Top Contributor
Aber ist was verkehrt daran Lösungen zu posten? Von denen kann man doch auch lernen.
Beides kann man pauschal nicht beantworten, weil es davon abhängt, wer mit welcher Intention eine Frage stellt.

Persönlich halte ich es möglichst so, Anfängern zu helfen, selbst auf die Lösung zu kommen. Nicht nur, weil der Lerneffekt für das konkrete Problem größer ist, sondern dabei auch gelernt wird, Probleme strukturiert anzugehen. Außerdem ist die Motivation doch eine ganz andere, wenn ich weiß, dass ich selbst etwas erreicht habe.

Das fängt damit an, dass derjenige in der Regel schon ein wenig Einsatz zeigen muss. Das hilft dann auch, zu erkennen, ob jemand etwas lernen will oder glaubt, jemand macht ihm seine Hausaufgaben. Der Zahn wird denjenigen dann meist relativ schnell gezogen. Dann kommen ein paar allgemeine Tipps (z. B. Papier und Stift), ggf. versucht man, das Problem zu erläutern usw. Darum sind die Threads hier im Forum auch verhältnismäßig lange, wenn nicht vorher irgendjemand kommt und eine Lösung postet :) Außerdem kommt es auch auf das konkrete Problem an: geht es nur um die Formulierung in Java oder tatsächlich um die Lösung eines Problems.

So halte ich es aber nur in den Fällen, wo es ums Lernen geht. Wenn das erkennbar nicht der Fall ist, hau ich natürlich schon konkrete Lösungsansätze, ggf. auch in Form von Code oder Links, raus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Methoden Methode die aus einem Array ein Index ausgibt? Java Basics - Anfänger-Themen 2
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 2
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 3
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
KogoroMori21 Methode in der main ausgeben Java Basics - Anfänger-Themen 2
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
M Rekursive Java-Methode Java Basics - Anfänger-Themen 13
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
B Methoden warum macht die Methode nicht das was ich erwarte? Java Basics - Anfänger-Themen 2
L Attribute aus Klasse in berechnungs Methode übergeben Java Basics - Anfänger-Themen 1
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 3
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
R Boolean Methode Rückgabewert if() Java Basics - Anfänger-Themen 1
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
M negate Methode Java Basics - Anfänger-Themen 13
JavaClara Fehlermeldung bei split-Methode Java Basics - Anfänger-Themen 12
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
Eule25 Methode mit Array Java Basics - Anfänger-Themen 4
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
F Methoden Methode richtig aufrufen Java Basics - Anfänger-Themen 3
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
T Methode implementieren Java Basics - Anfänger-Themen 21
JD_1998 Vorgegebene Methode erweitern um Hex -> Dezimal umzuwandeln Java Basics - Anfänger-Themen 1
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
P Methode trim() ohne StringBuilder Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
B Klassen Abstrake Klasse und Template Methode Java Basics - Anfänger-Themen 4
parrot Array: Methode fügeHinzu Java Basics - Anfänger-Themen 13
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
G Java charAt Methode Java Basics - Anfänger-Themen 10
B main Methode Java Basics - Anfänger-Themen 5
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
Y Methode + Parameters + Ein und Ausgabe Java Basics - Anfänger-Themen 1
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
G Java equals() Methode Java Basics - Anfänger-Themen 9
I Greedy Methode Methoden nutzen Java Basics - Anfänger-Themen 3
B Hilfe bei einer rekursiven Methode Java Basics - Anfänger-Themen 3
V Collections Methode in der Methode aufrufen Java Basics - Anfänger-Themen 2
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
Z Methode zum Heraufinden von Anagrammen ohne Java API, Ausnahme String Java Basics - Anfänger-Themen 14
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
J main methode Java Basics - Anfänger-Themen 1
C Methode Seiten tauschen eines erstellten Rechtecks mit Seite A und B Java Basics - Anfänger-Themen 9
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
J Methoden set Methode array Java Basics - Anfänger-Themen 2
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
J Apache Poi - createCell() Methode akzeptiert keinen Index aus for-schleife als Parameter Java Basics - Anfänger-Themen 4
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
R Methode Rückgabe Java Basics - Anfänger-Themen 10
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
R Signatur einer Methode in JAVA Java Basics - Anfänger-Themen 4
B LinkedList add-Methode Java Basics - Anfänger-Themen 10
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
J Rekursive swapArray Methode Java Basics - Anfänger-Themen 69
Kirby.exe Methode aus Superklasse benutzen Java Basics - Anfänger-Themen 18
G Linked list, Methode zum Vertauschen von Elementen Java Basics - Anfänger-Themen 14
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
T Collections Methode (Knoten hinzufügen) für Graphen Java Basics - Anfänger-Themen 32
D ArrayQueue - enqueue Methode Java Basics - Anfänger-Themen 2
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
J Womit kann ich diese Methode testen? Java Basics - Anfänger-Themen 5
UnknownInnocent Methoden While-Schleife so lange ausführen, wie Methode etwas zurückgibt Java Basics - Anfänger-Themen 2
H Arraydaten aus einer anderen Methode ausgeben Java Basics - Anfänger-Themen 4
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
H Objekt mit Methode erstellen Java Basics - Anfänger-Themen 6
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
M Klassen Methode in anderer Klasse aufrufen? Java Basics - Anfänger-Themen 3
M Methode in anderer Klasse aufrufen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben