Primzahlen Berechnung optimieren

Status
Nicht offen für weitere Antworten.

Bodo1981

Mitglied
Hallo,

hab ein Programm geschrieben, das die Primzahlen von 1 bis zu einem vom Benutzer eingegebenen Höchstwert berechnet und ausgibt. Dabei wird die Zeit gemessen. Im Moment braucht das Programm auf meinem Rechner für die Primzahlen von 1-100.000 ca. 2,5s. Nun lautet meine Frage, ob ich an meinem Programm noch irgendwas optimieren kann, damit die Berechnung noch schneller läuft.

PS: Bin auch offen für einen anderen Berechnungs-Algorithmus

Hier mein Programm:

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Primzahlen {
	
	public static void main(String[] args) {
		boolean isprim;
		int input = 0;
		int counter = 0;
		double timebefore;
		double timeafter;
		
		try{
			BufferedReader keyboard = new BufferedReader (new InputStreamReader(System.in));
			
			System.out.println ("*********************************************************************************");
			System.out.println ("** Berechnung der Primzahlen bis zu einem vom Benutzer eingegebenen Höchstwert **");
			System.out.println ("*********************************************************************************\n\n");
			System.out.print ("Geben Sie den Höchstwert ein: ");
			
			try{
				input = Integer.parseInt(keyboard.readLine());
			} catch (NumberFormatException nfe){
				System.out.println("Keine gültige Eingabe");
			}
		} catch (IOException ioe){
			System.out.println("Keine gültige Eingabe");
		}
		
		timebefore = System.currentTimeMillis();
		
		for (int n = 2; n <= input; n++) {
			isprim = true;
			
			for (int i = 2; i < (n / 2); i++) {
				
				if (i == 2 || (i % 2) != 0 ){
					if ((n % i) == 0) {
						isprim = false;
	                    break;   
	                }
				}
			}
      
			if (isprim) {
				System.out.println(n);
				counter++;
			}
		}
		
		timeafter = System.currentTimeMillis();
		
		System.out.println ("Es gibt " + counter + " Primzahlen von 1 - " + input);
		System.out.println ("\nBenötigte Zeit(in s): " + ((timeafter - timebefore)) / 1000);
	}
}

Danke euch schonmal im voraus
 

Bodo1981

Mitglied
Merci, hab den Algorithmus jetzt mal umgesetzt und der ist ja echt der Wahnsinn, jetzt bräuchte ich nur noch eine Bestätigung ob die Primzahlen auch wirklich stimmen. Dazu lasse ich die Primzahlen einfach zählen:

Primzahlen von 1-10.000: 1.229
Primzahlen von 1-100.000: 9.592

Kann mir bitte jemand die Zahlen bestätigen?

Hier nochmal der Algorithmus:

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Primzahlen2 {
	
	public static void main(String[] args) {
		int input = 0;
		int counter = 0;
		double timebefore;
		double timeafter;
		
		try{
			BufferedReader keyboard = new BufferedReader (new InputStreamReader(System.in));
			
			System.out.println ("*********************************************************************************");
			System.out.println ("** Berechnung der Primzahlen bis zu einem vom Benutzer eingegebenen Höchstwert **");
			System.out.println ("*********************************************************************************\n\n");
			System.out.print ("Geben Sie den Höchstwert ein: ");
			
			try{
				input = Integer.parseInt(keyboard.readLine());
			} catch (NumberFormatException nfe){
				System.out.println("Keine gültige Eingabe");
			}
		} catch (IOException ioe){
			System.out.println("Keine gültige Eingabe");
		}
		
		boolean[] gestrichen = new boolean[input + 1];
		
		timebefore = System.currentTimeMillis();
		
		
		// Speichern aller Zahlen von 2 bis n in der ArrayList<Integer> gestrichen
		for (int n = 2; n <= input; n++) {
			gestrichen[n] = false;
		}
		
		int i = 2;
		
		while ((i * i) <= input){
			if (gestrichen[i] == false){
				for (int j = (i * i); j <= input; j = j + i){
					gestrichen[j] = true;
				}
			}
			i++;
		}
		
		for (int a = 2; a <= input; a++){
			if (gestrichen[a] == false){
				System.out.println(a);
				counter++;
			}
		}
		
		timeafter = System.currentTimeMillis();
		
		System.out.println ("Es gibt " + counter + " Primzahlen von 1 - " + input);
		System.out.println ("\nBenötigte Zeit(in s): " + ((timeafter - timebefore)) / 1000);
	}
}
 
G

Gast

Gast
der obere algorithmus gibt falsche zahlen aus die keine primzahlen sind
 

The_S

Top Contributor
Also ich hab nen anderen Algorithmus drüber laufen lassen und komme zu den selben Ergebnissen!

Zu dem Algo: Er ist natürlich sehr schnell, auf der anderen Seite bekommt er recht schnell Speicherplatzprobleme, sobald mal eine größere Menge an Primzahlen berechnet werden soll.
 

Marco13

Top Contributor
.... und die Bekommt man auch dann noch, wenn man (wie es sinnvoller wäre) den "gestrichen"-Array nur
Math.sqrt(eingabe)+1
groß macht....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Primzahlen generieren Allgemeine Java-Themen 6
J Primzahlen berechnen Allgemeine Java-Themen 13
G Anzahl Primzahlen im Intervall Allgemeine Java-Themen 3
C Primzahlen Server Allgemeine Java-Themen 3
D Primzahlen berechnen funktioniert nicht Allgemeine Java-Themen 2
E Primzahlen - Sieb des Eratosthenes Allgemeine Java-Themen 40
B Primzahlen test Allgemeine Java-Themen 3
pkm Berechnung der Fakultät von Fließkommazahlen anhand von Stirlingformel Allgemeine Java-Themen 4
I Berechnung Lagerbestands / Verfügbarkeitsprüfung Allgemeine Java-Themen 1
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
D Berechnung des Cosinus Allgemeine Java-Themen 4
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
A Fehlerhafte Nst Berechnung einer bestimmten Fkt. (Bisektion) Allgemeine Java-Themen 10
E Berechnung des Schnittpunktes von zwei Geraden Allgemeine Java-Themen 1
P Performate Zeiteiteiteilungs- Berechnung Allgemeine Java-Themen 4
B TileMap berechnung? Allgemeine Java-Themen 8
P jodaTime Berechnung Geburtstag Allgemeine Java-Themen 1
K Probleme bei Berechnung der Komplexität Allgemeine Java-Themen 7
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
B BlueJ Potenz Berechnung Allgemeine Java-Themen 16
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
M Berechnung verbessern Allgemeine Java-Themen 8
W OOP Berechnung des Skalarprodukts Allgemeine Java-Themen 9
H Demonstrationsprogramm zur CRC-Berechnung Allgemeine Java-Themen 2
D Berechnung von Sonnenauf und Sonnenuntergang Allgemeine Java-Themen 2
E Berechnung in Arraylist Allgemeine Java-Themen 10
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
E Falsche Ergebnisse bei PQ-Formel Berechnung Allgemeine Java-Themen 12
N Optimierung einer Berechnung Allgemeine Java-Themen 17
G java.sql Time Berechnung Allgemeine Java-Themen 6
Eldorado Berechnung von Koordinaten, die zufällig aussehen Allgemeine Java-Themen 5
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
J Berechnung anhand einer XML-Datei Allgemeine Java-Themen 3
Private Void rekursive vs. iterative Lösung für Berechnung der Fakultät Allgemeine Java-Themen 12
S YUV to RGB (einfache Berechnung) Allgemeine Java-Themen 5
G Programm zur Berechnung von Summe, Median, Erwartungswert, usw von einem Array Allgemeine Java-Themen 7
C Bilder rotieren, Denkfehler in der Berechnung? Allgemeine Java-Themen 2
B Berechnung von Punkten/ If-else Strategie?! Allgemeine Java-Themen 51
T Berechnung in zweidimensionalem Array Allgemeine Java-Themen 3
X hashCode() Berechnung Allgemeine Java-Themen 5
R Tabelle - Berechnung der "Zeilenart" Allgemeine Java-Themen 2
L Berechnung mit Module bis bes.timme Zahl erreicht. Allgemeine Java-Themen 4
P CRC Berechnung Allgemeine Java-Themen 2
J berechnung von potenzen und wurzel-ziehen ohne klasse " Allgemeine Java-Themen 14
D Problem bei einer Berechnung (pow?) Allgemeine Java-Themen 3
P Java-Programm zur Berechnung globaler Minimas und Maximas-ff Allgemeine Java-Themen 4
A Probleme bei der Berechnung von Pi! Java Problem Allgemeine Java-Themen 2
M Servlet --> Berechnung --> Timeout vom Proxy oder IE!? Allgemeine Java-Themen 7
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
D Methoden Java Applikation Die System Auslastung optimieren ? Allgemeine Java-Themen 7
M Code optimieren Allgemeine Java-Themen 7
nrg StringSplit optimieren Allgemeine Java-Themen 8
D einfache Filterung optimieren Allgemeine Java-Themen 16
E Html tags entfernen optimieren Allgemeine Java-Themen 12
S Code Optimieren Allgemeine Java-Themen 32
B Verzeichnis durchsuchen geschwindigkeit optimieren Allgemeine Java-Themen 6
E subList optimieren Allgemeine Java-Themen 3
P Code optimieren Allgemeine Java-Themen 9
T Optimieren von "Lupen" Effekt Allgemeine Java-Themen 5
S Java3D Performance optimieren Allgemeine Java-Themen 5
M Code optimieren Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben