Primzahlen_tester

Xaver code

Mitglied
Hallo,
ich schreibe gerade einen primzalen tester für einen freund ich komme aber nicht weiter da egal welche zahl eingebe es wird immer ausgegeben das es eine priemzahl ist
Java:
package Priemzahlen_tester;

public class Main {

    public static void main(String[] args) {
       
        int number = 4;
       
        if(number / number == 1 && number / 1 == number) {
            System.out.println(number + " ist eine Priemzahl");
        } else if(number / number != 1 && number / 1 != number) {
            System.out.println(number + " ist keine Priemzahl");
        }
       

    }

}
das ist mein code würde mich über Hilfe freuen.

ps.: falls sehr offensichtliche Fehler drin sind ich bin noch Anfänger.
LG
 

LimDul

Top Contributor
ps.: falls sehr offensichtliche Fehler drin sind ich bin noch Anfänger.
Nun ja, der Code hat nun mal nichts mit einem Primzahltester zu tun.
Du testest, ob eine Zahl geteilt durch selber 1 ergibt und ob eine Zahl geteilt durch 1 sich selber ergibt, dann behauptest du, das ist ein Primzahl.

4 ist laut deinem Code also eine Primzahl, wenn 4/4 = 1 und 4/1 = 4 ergibt. Was nun mal nicht stimmt

Wirf den weg und schreib erst mal auf, wie das funktionieren soll. Wann ist eine Zahl eine Primzahl? Erstmal ganz simpel formulieren und dann als Code umsetzen.
 

Robert Zenz

Top Contributor
ps.: falls sehr offensichtliche Fehler drin sind ich bin noch Anfänger.
Fangen wir damit an dass du augenscheinlich nicht weiszt was eine Primzahl ist. Eine Primzahl ist eine Zahl welche nur durch sich selbst oder Eins teilbar ist. Soweit so gut. Das bedeutet um festzustellen ob dies eine Primzahl ist, muss man ausschlieszen dass die Zahl durch irgendeine andere Zahl teilbar ist als durch sich selbst und Eins.

Du testest im Moment ob die gegebene Zahl durch sich selbst und durch Eins teilbar ist...das ist aber jede Zahl. Du musst pruefen ob sie auch durch andere teilbar ist. Beispiele als Wahrheitstabelle, "Spalte ist restlos teilbar durch Zeile":

Code:
    1  2  3  4  5  6  7  8  9
 1  J  J  J  J  J  J  J  J  J
 2  N  J  N  J  N  J  N  J  N
 3  N  N  J  N  N  J  N  N  J
 4  N  N  N  J  N  N  N  J  N
 5  N  N  N  N  J  N  N  N  N
 6  N  N  N  N  N  J  N  N  N
 7  N  N  N  N  N  N  J  N  N
 8  N  N  N  N  N  N  N  J  N
 9  N  N  N  N  N  N  N  N  J

Du suchst also nach Spalten/Zahlen welche nur zwei "J" haben, naemlich alle jene welche nur durch sich selbst oder Eins teilbar sind. Wie du merkst, sind alle Zahlen zumindest durch Eins und sich selbst teilbar. Und auf das musst du auch pruefen, ob die Zahl durch alle anderen nicht teilbar ist.
 

Neumi5694

Top Contributor
Betonung auf "nur".
D.h. du musst alles andere ausschließen. Nur wenn die Zahl durch keine andere teilbar ist, ist sie eine Primzahl. Dein Algorithmus muss also so ziemlich genau das Gegenteil von dem machen, was er aktuell macht.
Als kleiner Tip: Abgesehen von den Spezialfällen am Anfang muss du nur Divisoren testen, die kleiner als die Wurzel deiner Zahl sind
 
Zuletzt bearbeitet:

Xaver code

Mitglied
Betonung auf "nur".
D.h. du musst alles andere ausschließen. Nur wenn die Zahl durch keine andere teilbar ist, ist sie eine Primzahl. Dein Algorithmus muss also so ziemlich genau das Gegenteil von dem machen, was er aktuell macht.
Als kleiner Tip: Abgesehen von den Spezialfällen am Anfang muss du nur Divisoren testen, die kleiner als die Wurzel deiner Zahl sind
also so wie ich es jetzt verstanden habe Muss ich also testen ob number / {irgendeine random zahl} teilbar ist. Also wenn number durch einer gerade und einer ungeraden zahl nicht teilbar ist dann ist das eine priemzahl ?
habe ich das so erstmal richtig verstanden?
 

LimDul

Top Contributor
also so wie ich es jetzt verstanden habe Muss ich also testen ob number / {irgendeine random zahl} teilbar ist. Also wenn number durch einer gerade und einer ungeraden zahl nicht teilbar ist dann ist das eine priemzahl ?
habe ich das so erstmal richtig verstanden?
Nein. Wenn es außer 1 und selber keine weitere Zahl gibt, durch die sie teilbar ist. Das heißt, z.B. 57 ist genau dann ein Primzahl wenn sie nur durch 1 und 57 teilbar ist. Also musst du sicherstellen, dass nicht durch:
2,3,4,5,6,7,8,9,10,.....50,51,52,53,54,55,56 teilbar ist.
 

mihe7

Top Contributor
Also musst du sicherstellen, dass nicht durch:
2,3,4,5,6,7,8,9,10,.....50,51,52,53,54,55,56 teilbar ist.
@Xaver code, dazu kann man sich ein paar Dinge überlegen. Zuerst: jede gerade Zahl ist durch 2 teilbar. Es kann also keine gerade Primzahl > 2 geben. Damit fallen die Teiler, die ein Vielfaches von 2 sind, schon mal weg. Der zweite Teil: die Multiplikation ist kommutativ: a*b=b*a. Daher reicht es, die Teiler bis zur Wurzel der Zahl zu untersuchen. Bei 57 müssten also nur die Teiler 2, 3, 5 und 7 überprüft werden.
 

uuu3uuu

Aktives Mitglied
Fun fact: Das Leben wäre auch sehr viel einfacher, wenn man sagen könnte, in welchen Abständen mögliche Teiler vorkommen...

Sprich: Bei Element aus [2,sqrt(x)] nicht alle (oder nicht die Hälfe) Elemente testen zu müssen ;)

Btw: Java hat eine "is probable prime" Methode, die schon sehr gute Prognosen gestattet :)
 

Neumi5694

Top Contributor
also so wie ich es jetzt verstanden habe Muss ich also testen ob number / {irgendeine random zahl} teilbar ist. Also wenn number durch einer gerade und einer ungeraden zahl nicht teilbar ist dann ist das eine priemzahl ?
habe ich das so erstmal richtig verstanden?
Nein, du musst sicherstellen, dass es durch keine dieser Zahlen teilbar ist.

@uuu3uuu alles richtig, aber bei Schulaufgaben geht man erst mal mit der Brute Force Methode vor.
Und es kann mir keiner erzählen, dass die Suche nach Primzahlen keine Schulaufgabe ist.
 

Oneixee5

Top Contributor
@Xaver code, dazu kann man sich ein paar Dinge überlegen. Zuerst: jede gerade Zahl ist durch 2 teilbar. Es kann also keine gerade Primzahl > 2 geben. Damit fallen die Teiler, die ein Vielfaches von 2 sind, schon mal weg. Der zweite Teil: die Multiplikation ist kommutativ: a*b=b*a. Daher reicht es, die Teiler bis zur Wurzel der Zahl zu untersuchen. Bei 57 müssten also nur die Teiler 2, 3, 5 und 7 überprüft werden.
Eine ebenfalls einfach zu implementierende Optimierung berücksichtigt, daß alle Zahlen, die weder durch 2 noch durch 5 teilbar sind, zwangsläufig auch nicht durch alle größeren Zahlen teilbar sind, die mit 2,4,5,6,8 oder 0 enden. In der Schleife müssen also nach der zwei und der fünf nur noch diejenigen Teiler ausprobiert werden, die mit den Ziffern 1,3,7 und 9 enden.
 

Oneixee5

Top Contributor
@Xaver code, dazu kann man sich ein paar Dinge überlegen. Zuerst: jede gerade Zahl ist durch 2 teilbar. Es kann also keine gerade Primzahl > 2 geben. Damit fallen die Teiler, die ein Vielfaches von 2 sind, schon mal weg. Der zweite Teil: die Multiplikation ist kommutativ: a*b=b*a. Daher reicht es, die Teiler bis zur Wurzel der Zahl zu untersuchen. Bei 57 müssten also nur die Teiler 2, 3, 5 und 7 überprüft werden.
Eine ebenfalls einfach zu implementierende Optimierung berücksichtigt, daß alle Zahlen, die weder durch 2 noch durch 5 teilbar sind, zwangsläufig auch nicht durch alle größeren Zahlen teilbar sind, die mit 2,4,5,6,8 oder 0 enden. In der Schleife müssen also nach der zwei und der fünf nur noch diejenigen Teiler ausprobiert werden, die mit den Ziffern 1,3,7 und 9 enden.
 

Neumi5694

Top Contributor
Eine ebenfalls einfach zu implementierende Optimierung berücksichtigt, daß alle Zahlen, die weder durch 2 noch durch 5 teilbar sind, zwangsläufig auch nicht durch alle größeren Zahlen teilbar sind, die mit 2,4,5,6,8 oder 0 enden. In der Schleife müssen also nach der zwei und der fünf nur noch diejenigen Teiler ausprobiert werden, die mit den Ziffern 1,3,7 und 9 enden.
So was ähnliches wollte ich auch schon schreiben. Das ist allerdings nur ein theoretischer Ansatz, die Laufzeit wird daduch sogar verlängert.

Durch 2,3,5 testet man ja gleich am Anfang, die höheren Divisoren werden beim Durchlaufen der Schleife gar nicht erst erreicht.
Eine einfache mod-Operation ist weniger rechenintensiv als die Zahl zuerst mal im Zehnersystem darzustellen und die letzte Ziffer rauszupicken.


Falls man eine Liste aller Primzahlen erstellen und pro Zahl die Tests parallel laufen lassen will, reicht es natürlich, nur durch die bisher bekannten Primzahlen zu dividiern.
 

Oneixee5

Top Contributor
So was ähnliches wollte ich auch schon schreiben. Das ist allerdings nur ein theoretischer Ansatz, die Laufzeit wird daduch sogar verlängert.

Durch 2,3,5 testet man ja gleich am Anfang, die höheren Divisoren werden beim Durchlaufen der Schleife gar nicht erst erreicht.
Eine einfache mod-Operation ist weniger rechenintensiv als die Zahl zuerst mal im Zehnersystem darzustellen und die letzte Ziffer rauszupicken.


Falls man eine Liste aller Primzahlen erstellen und pro Zahl die Tests parallel laufen lassen will, reicht es natürlich, nur durch die bisher bekannten Primzahlen zu dividiern.
Naja, ich würde hier ja einen Test rein stellen aber dieser würde die komplette Hausaufgabe lösen ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
B Primzahlen bis 100 addieren Java Basics - Anfänger-Themen 16
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
S Primzahlen in Array ausgeben Java Basics - Anfänger-Themen 14
M Array auf Primzahlen prüfen Java Basics - Anfänger-Themen 7
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
P Primzahl mit Angabe der höchsten Primzahl und Angabe der Anzahl von Primzahlen bis 100 Java Basics - Anfänger-Themen 8
Java The Hutt Primzahlen - die ersten 100 Java Basics - Anfänger-Themen 17
N Erste Schritte Primzahlen-ArrayIndexOutOfBounds Java Basics - Anfänger-Themen 23
R Primzahlen Zähler Programm / Benachbarte Primzahlen Java Basics - Anfänger-Themen 30
D Klassen Primzahlen überprüfen Java Basics - Anfänger-Themen 3
I Primzahlen Java Basics - Anfänger-Themen 17
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
S Primzahlen berechnen funktioniert nicht richtig Java Basics - Anfänger-Themen 1
R primzahlen im array Java Basics - Anfänger-Themen 33
M Primzahlen, nur jede 2te ausgeben Java Basics - Anfänger-Themen 11
T Primzahlen Fehler Java Basics - Anfänger-Themen 4
K Primzahlen Java Basics - Anfänger-Themen 6
L Primzahlen im Array ausgeben Java Basics - Anfänger-Themen 3
P Primzahlen Java Basics - Anfänger-Themen 3
A Methoden Primzahlen erstellen von 1 bis 100-Codeprobleme Java Basics - Anfänger-Themen 2
H Variablenverfolgung - Primzahlen Java Basics - Anfänger-Themen 7
G Primzahlen Java Basics - Anfänger-Themen 6
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
S Primzahlen bis 1000 ausgeben Java Basics - Anfänger-Themen 17
K Methoden Primzahlen Java Basics - Anfänger-Themen 33
S Input/Output Primzahlen Datenbank Java Basics - Anfänger-Themen 11
F Primzahlen in Zahlenblöcken ausgeben Java Basics - Anfänger-Themen 9
M Primzahlen - es werden alle Nicht-Primzahlen ausgegeben Java Basics - Anfänger-Themen 5
M primzahlen Java Basics - Anfänger-Themen 4
S Programm zu Ermittlung von Primzahlen Java Basics - Anfänger-Themen 14
E Programm zum Primzahlen ausgeben-Fehler Java Basics - Anfänger-Themen 12
X Primzahlen Java Basics - Anfänger-Themen 7
S Primzahlen Java Basics - Anfänger-Themen 12
B Programmierobjekt - Primzahlen Java Basics - Anfänger-Themen 2
D Primzahlen ausgeben. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
N Primzahlen Java Basics - Anfänger-Themen 5
I Primzahlen check, String prüfen lassen. Java Basics - Anfänger-Themen 6
A OOP Programm zum bestimmen von Primzahlen, OutofBoundsException Java Basics - Anfänger-Themen 10
apple987123 Primzahlen Java Basics - Anfänger-Themen 12
A Primzahlen: ein paar offene Fragen Java Basics - Anfänger-Themen 2
T Primzahlen Java Basics - Anfänger-Themen 6
G Primzahlen Java Basics - Anfänger-Themen 18
B Primzahlen berechnen - Wieso unterschiedliche Java Basics - Anfänger-Themen 3
B Primzahlen Algorithmus - wo ist der Fehler ? Java Basics - Anfänger-Themen 2
E Primzahlen Java Basics - Anfänger-Themen 5
B Primzahlen mit Array errechnen! Java Basics - Anfänger-Themen 13
H Miller Rabin Test Primzahlen werden teilweise nicht gefunden Java Basics - Anfänger-Themen 5
M Wer kann mir bei Primzahlen helfen ? Java Basics - Anfänger-Themen 4
G Frage zur Primzahlen berechnung Java Basics - Anfänger-Themen 11
kulturfenster Primzahlen berechnen Java Basics - Anfänger-Themen 11
D Primzahlen Java Basics - Anfänger-Themen 4
N Zerlegung in Primzahlen Java Basics - Anfänger-Themen 7
F Programm Primzahlen Java Basics - Anfänger-Themen 5
J Primzahlen errechnen.ArrayLists abgleichen Java Basics - Anfänger-Themen 2
M Primzahlen Java Basics - Anfänger-Themen 6
C Primzahlen Java Basics - Anfänger-Themen 7
C Primzahlen Java Basics - Anfänger-Themen 2
S Primzahlen Java Basics - Anfänger-Themen 49
U Primzahl-Tester Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben