For-Schleife welche erkennt ob es eine Primzahl ist oder nicht!?
Hallo ich bräuchte Hilfe.Wir haben gerade die For-Schleife gelernt und wir sollen eine For-Schleife machen welche die sagen kann ob eine Zahl eine Primzahl ist oder nicht.Bitte Bald antworten wäre nett :)
8 Antworten
Auf Stackoverflow gibt es schon einige antworten:
https://stackoverflow.com/questions/37349692/check-if-a-number-is-prime-in-c-sharp
https://stackoverflow.com/questions/28846826/c-sharp-print-the-prime-numbers-from-0-to-10-000
Eine Primzahl definiert sich dadurch das sie nur durch eins und sich selbst teilbar ist. Das kannst du dementsprechend für die jeweilige Zahl überprüfen.
Das weis ich ich meine ich brauche hilfe beim Programm schreiben ich kenne mich bei den codes nicht gut aus
Es kommt darauf an mit welcher Sprache ihr programmiert.
Allgemein sind bloß die Überprüfungsinstanzen einer Primzahl das Entscheidende.(google diese nach und setze sie in If-Abfragen)
Die Forschleife dient dazu über eine Liste von Zahlen zu iterieren, welche dann in der scope dieser überprüft werden.
Aber deine Frage ist zu wage ausgedrückt.
Ich nehme auch einmal an, dass du eine Liste mit den zutreffenden Primzahlen willst. Und diese dann zurückgibst.
Ich gehe mal davon aus, dass ihr in Java programmiert, da dies in Schulen oft benutzt wird.
Bin grad im Zug, kanns nicht testen, aber so ungefähr könnte die Methode aussehen:
public ArrayList<int> rimzahlenliste(Integer[] testListe){
ArrayList<int> primList= new ArrayList<int>();
For(int listElement:testListe){
//* hier kommen dann deine Abfragen hinein als Ifabfragen bsp. Und anschließend, wenn eine Zahl eine Primzahl ist, dann fügst du sie in primList hinzu mit primList.append(listElement).
So hast du dann eine Liste. Ich weiß leider nur noch ungenau wie das mit den Primzahlen war... Habe das nie gelernt und es auch nie als wichtig betrachtet. Also google nach und dann mach hier deine Abfrage.
*//
}
Return primList;
}
Bei mehr Informationen kann man dir mehr helfen.
Praktisch musst Du dafür nur überprüfen, ob es mehr als die zwei Teiler 1 und n gibt. Je größer n allerdings ist, desto rechenintensiver wird es.
Der grundsätzliche Algorithmus ist folgender:
- überprüfen, ob die Zahl positiv ist
- dann intelligent überprüfen, ob es zwischen 1 und der Zahl noch einen weiteren Teiler gibt
- wenn ja, dann ist die Zahl nicht prim
- wenn nicht, ist die Zahl prim
Probier's damit erstmal selber und schau, ob Du's hinkriegst.
Du laufzeittechnisch beste und verständlichste, die ich hingekriegt habe, ist folgende:
bool isPrim(int n){
if(n == 2) return true;
if(n <= 1 || n%2 == 0) return false;
for(int i=3; i<=i/3; i+=2){
if(n%i == 0) return false;
}
return true;
}
Kleiner Hinweis am Rande: Ich habe die ersten Schritte umgedreht, um dann zwei Bedingungen in eine if-Methode packen zu können und den Code kompakter zu machen. Andersherum würde es aber genauso funktionieren.
- Zuallererst wird die 2 separat behandelt - ein Sonderfall, nämlich die einzige gerade Primzahl.
- Dann werden alle negativen Zahlen, alle geraden Zahlen und die 1 als Nicht-Primzahlen zurückgegeben.
- In der Schleife wird nun jede ungerade Zahl ab 3 aufwärts überprüft, ob sie ein Teiler der betrachteten Zahl ist.
- Ist das der Fall, hat die Zahl mehr als 2 Teiler und es wird false zurückgegeben.
- Ist das bis n/3 - die letzte Zahl, die ein Teiler sein könnte - nicht der Fall, ist die Zahl prim.
n/3 ist streng genommen aber sogar noch zu viel des Guten, denn jeder Teiler hat ein Gegenstück. Ist 57 beispielsweise durch 3 teilbar, ist sie auch durch 57/3 = 19 teilbar, was damit einhergeht. Wenn man das auf Primzahlen ohne weitere Teiler überträgt, wäre der eigentliche Endpunkt bei √n. Aber n/3 ist für den Anfang völlig okay, sofern Du mit den betrachteten Zahlen nicht in die Millionenhöhe gehst.
LG
Am einfachsten: bei zu überprüfender Zahl "n" für jede Zahl "k" von 2 bis n-1 prüfen, ob n durch k ohne Rest teilbar ist.
In üblicher C-ähnlicher Syntax
int n = inputInt();
bool teilbar = false;
for (k=2; k<n; k++) {
if (istteilbar(n, k)) {teilbar=true;}
}
if (istteilbar) {
ausgabe("nicht prim");
} else {
ausgabe("prim");
}
Ach okay... c# ist ja anders und unten haste ja bereits Leute, die das Denken sogar für dich übernehmen :D
Antwort einfach ignorieren hihihi