10001-te Primzahl herausfinden

ac

Mitglied
hallo,

muss die 10001-te Primzahl herausfinden. Dazu habe ich folgenden Code geschrieben, der allerdings nicht terminiert. Könnte mir jmd. vtl. sagen, warum? Sehe nämlich den Fehler nicht:


Java:
public class Problem7{

	//prüft, ob Zahl gleich Primzahl
	
	static boolean prim(long n){
		
		if(n<=2){
			return (n == 2);
		}
		
		for(long i=2; i<=n; i++){
			
			if( (n%i) == 0){
				return false;
			}	
		}
		
		return true;
	}

	public static void main(String[] args){
		
		Problem7 pr = new Problem7();
		
		long test = 1;
		long zaehler = 0;
		long anzahlPrim = 0;
		
		while(test == 1){
			
			if(pr.prim(zaehler)){
				anzahlPrim +=1;
				zaehler +=1;
			}
			
			else{
				zaehler+=1;
			}
			if(anzahlPrim == 10001){
				System.out.println(zaehler);
				test = 0;
			}
		}
	}


}
 

stg

Top Contributor
Der terminiert schon, nur nicht in der Zeit, die du dir wünscht und auch nicht mit dem von dir gewünschten Ergebnis!

Für
Code:
i=n
ist
Code:
n%i
stets 0 und damit wir ab der zwei gar keine Primzahl gefunden. Richtig wäre hier im Schleifenkopf
Code:
i<n
statt
Code:
i<=n
zu schreiben. Aber es reicht aus nur alle möglichen Teiler bis zur Quadratwurzel von
Code:
n
zu prüfen. Wenn du bis dahin keinen Teiler gefunden hast, dann gibt es danach auch keinen mehr! Damit kannst du die Laufzeit deines Codes schon einmal entscheidend verbessern.

Übrigens, die 10.0001ste Primzahl ist 104,743, so zur Kontrolle...
 

ac

Mitglied
vielen dank für die Hilfe...v.a. den Tipp mit der Quadratwurzel. Den hatte ich zwar irgendwo schonma gesehen, aber hatte nicht ganz verstanden warum man die Wurzel nehmen sollte. Jetzt weiß ichs.

edit: habe auch in Zeile 41 "....(zaehler - 1 ) " geschrieben...damit das richtige Ergebnis rauskommen soll. Wusste jez nicht ganz wieso ich am ende mit minus 1 rechnen soll, aber es hat geholfen auf das korrekte Endergebnis zu kommen.



gruß,
ac
 

MrClave

Bekanntes Mitglied
Du kannst zusätzlich Zeit sparen, indem du alle geraden Zahlen überspringst, und nur mit den ungeraden arbeitest.

Java:
for ( long i = 0; i * i <= n; i += 10 ) {

wenn i + 1 % 2 == 0 -> keine primzahl
wenn i + 3 % 2 == 0 -> keine primzahl
wenn i + 5 % 2 == 0 -> keine primzahl
wenn i + 7 % 2 == 0 -> keine primzahl
wenn i + 9 % 2 == 0 -> keine primzahl

}


PS:
Hier kannst du dir das else sparen, da du den Zähler so oder so inkrementierst.

Java:
if(pr.prim(zaehler)){
         anzahlPrim +=1;
           zaehler +=1;
   }      
   else{
        zaehler+=1;
   }

Java:
if ( pr.prim( zaehler ) ) {
anzahlPrim++;
}
zaehler++;
 
Zuletzt bearbeitet:

stg

Top Contributor
...man kann natürlich noch viel, viel mehr optimieren. Ein Primzahlsieb bietet nochmals einen gewaltigen Geschwindigkeitsvorteil, da man sogar ganz ohne die eklige Modulo-Rechnerei auskommt. Außerdem haben alle Primzahlen größer als 3 die Form 6k±1 und man muss nur diese Zahlen testen usw.. je mehr Wissen man mitbringt, was die Mathematik hinter Primzahlen anbelangt, desto mehr kann man hier noch rauskitzeln. Man muss je nach Anwendungsfall natürlich immer noch abwägen, zwischen Speicherverbrauch und Laufzeit ... der wichtigste Optimierungsschritt ist aber der erste und bereits mehrfach genannte, dass nur bis zur Quadratwurzel von n auf Teilbarkeit geprüft wird, da hier tatsächlich das asymptotische Laufzeitverhalten entscheident verbessert wird, und nicht nur lediglich um einen konstanten Faktor.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Primzahl mit Angabe der höchsten Primzahl und Angabe der Anzahl von Primzahlen bis 100 Java Basics - Anfänger-Themen 8
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
O Erste Schritte Primzahl Methode Java Basics - Anfänger-Themen 8
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
O Primzahl bis n Java Basics - Anfänger-Themen 5
D Primzahl Aufgabe Java Basics - Anfänger-Themen 5
R Primzahl ja/nein - besserer Code möglich? Java Basics - Anfänger-Themen 2
T Primzahl Java Basics - Anfänger-Themen 12
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
U Primzahl-Tester Java Basics - Anfänger-Themen 3
L primzahl Java Basics - Anfänger-Themen 54
R Primzahl kleiner 3 Java Basics - Anfänger-Themen 2
T Primzahl Schleife Java Basics - Anfänger-Themen 15
X Primzahl Ausgabe falsch Java Basics - Anfänger-Themen 10
M Primzahl Java Basics - Anfänger-Themen 11
D Array Fehler / groesste Primzahl suchen Java Basics - Anfänger-Themen 4
F Primzahl oder nicht?! Java Basics - Anfänger-Themen 7
S Primzahl in einem Array finden Java Basics - Anfänger-Themen 21
J Primzahl mit for Schleife Java Basics - Anfänger-Themen 4
A Fehler im Primzahl Programm Java Basics - Anfänger-Themen 17
S Primzahl berechnen in Java Java Basics - Anfänger-Themen 7
K Primzahl//immer true Java Basics - Anfänger-Themen 7
ven000m Primzahl.class wie starte ich diese einzelne Datei? Java Basics - Anfänger-Themen 10
M Primzahl Java Basics - Anfänger-Themen 8
W Nächstgelegene Primzahl Java Basics - Anfänger-Themen 3
I Primzahl suchen Java Basics - Anfänger-Themen 5
G primzahl oder nicht? Java Basics - Anfänger-Themen 16
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
Schmaxel Herausfinden ob ein Bruch kürzbar ist. Java Basics - Anfänger-Themen 6
mr.kottig Großeltern herausfinden Java - Map? Java Basics - Anfänger-Themen 16
P Herausfinden, auf welchem Panel des CardLayouts man gerade ist? Java Basics - Anfänger-Themen 12
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
T Return einer anderen Methode herausfinden Java Basics - Anfänger-Themen 9
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
K die Source eines Events bei verschiedenen Quellen herausfinden Java Basics - Anfänger-Themen 1
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
WetWer Herausfinden wer Tic Tac Toe gewonnen hat Java Basics - Anfänger-Themen 4
H Erste Schritte Längstes Wort eines Strings herausfinden Java Basics - Anfänger-Themen 7
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
Z Wie Position eines Objekts in Liste herausfinden? Java Basics - Anfänger-Themen 15
T Wie kann man den Klassentyp eines Objektes in Java herausfinden? Java Basics - Anfänger-Themen 4
J Erste Schritte Zweithöchster Wert eines Arrays herausfinden - warum klappt mein Code nicht? Java Basics - Anfänger-Themen 3
M Windowsbenutzernamen herausfinden? Java Basics - Anfänger-Themen 6
K Vererbung Zuweisungsfehler (Kompilier- und Laufzeitfehler) herausfinden Java Basics - Anfänger-Themen 3
Helgon Aufgerufene URL herausfinden Java Basics - Anfänger-Themen 6
J Herausfinden der Systemfont Java Basics - Anfänger-Themen 4
S Vererbung/Herausfinden welches Objekt von welcher Klasse Java Basics - Anfänger-Themen 4
P Vererbung herausfinden welche Klasse was erbt Java Basics - Anfänger-Themen 3
B Binärbaum höhe herausfinden Java Basics - Anfänger-Themen 12
E Gründe einer NotSerializableException herausfinden Java Basics - Anfänger-Themen 7
F Container Objekt herausfinden Java Basics - Anfänger-Themen 15
N Herausfinden ob setIcon gesetzt wurde Java Basics - Anfänger-Themen 8
R Mittelpunkt von Bounding Box herausfinden Java Basics - Anfänger-Themen 3
K Änderungsdatum einer Website herausfinden Java Basics - Anfänger-Themen 6
F Inhalt einer Variable per Code herausfinden? Java Basics - Anfänger-Themen 9
M Ordner der jar Datei herausfinden und Partent durchsuchen Java Basics - Anfänger-Themen 4
R Java Version herausfinden..? Java Basics - Anfänger-Themen 1
G Gesamten clickCount mehrerer JPanels herausfinden Java Basics - Anfänger-Themen 5
G Herausfinden, welche Componente als LETZTES focus hatte Java Basics - Anfänger-Themen 2
K itemlistener item index herausfinden Java Basics - Anfänger-Themen 4
G Position eines Objekts auf Webseite herausfinden Java Basics - Anfänger-Themen 9
Horst79 Rootverzeichnis herausfinden im Java-Applett? Java Basics - Anfänger-Themen 5
S Unbenutzte/überflüssige Getter/Setter herausfinden? Java Basics - Anfänger-Themen 2
J Methoden zu gegebenem main herausfinden Java Basics - Anfänger-Themen 22
M Rest herausfinden Java Basics - Anfänger-Themen 2
L wie den pfad zu meiner datei herausfinden? Java Basics - Anfänger-Themen 2
M Klassenpfad herausfinden Java Basics - Anfänger-Themen 4
G Verzeichnis herausfinden Java Basics - Anfänger-Themen 3
G erstes Zeichen eines Strings herausfinden Java Basics - Anfänger-Themen 3
G Applikationspfad herausfinden Java Basics - Anfänger-Themen 10
T Ordner herausfinden, aus dem das Programm aufgerufen wird Java Basics - Anfänger-Themen 5
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
A Mitte des Bildschirms herausfinden Java Basics - Anfänger-Themen 4
G Herausfinden ob Webdatei existiert Java Basics - Anfänger-Themen 4
S JFrame Location herausfinden Java Basics - Anfänger-Themen 4
D Name eines Terminals herausfinden Java Basics - Anfänger-Themen 3
M Verzeichnis der main Klasse herausfinden Java Basics - Anfänger-Themen 7
G länge einer audiodatei herausfinden Java Basics - Anfänger-Themen 3
M Herausfinden von welchem Pfad aus ein Prog gestartet wurde Java Basics - Anfänger-Themen 4
D Benutzername herausfinden Java Basics - Anfänger-Themen 5
F Root-Pfad der Java-Anwendung herausfinden Java Basics - Anfänger-Themen 1
L Wie herausfinden ob JList Elemente hinzugefügt wurden? Java Basics - Anfänger-Themen 6
G Installationsverzeichnis herausfinden Java Basics - Anfänger-Themen 4
F Arbeitstage eines Monats herausfinden Java Basics - Anfänger-Themen 22
R In ResultSet Anzahl der Zeilen herausfinden? Java Basics - Anfänger-Themen 3
J Rest einer Zahl herausfinden Java Basics - Anfänger-Themen 3
R Aktuelle URL herausfinden Java Basics - Anfänger-Themen 5
J Datum, Tage herausfinden Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben