For-Schleife welche erkennt ob es eine Primzahl ist oder nicht!?

8 Antworten

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.


User785302 
Beitragsersteller
 02.02.2018, 15:26

Das weis ich ich meine ich brauche hilfe beim Programm schreiben ich kenne mich bei den codes nicht gut aus

0

Welche Programmiersprache?


User785302 
Beitragsersteller
 02.02.2018, 15:24

c#

0
User785302 
Beitragsersteller
 02.02.2018, 15:25

fallst du mir weiter helfen könntest danke schön :)

0
User785302 
Beitragsersteller
 02.02.2018, 15:28

Am wichtigsten wäre es wenn du mir die codes schreiben könntest welche ich brauche

0
Nnifty23  02.02.2018, 15:40
@User785302

Ne, sorry kenne mich doch nicht mit C# gut genug aus, aber du muss eine for-schleife machen (for(int i=2; i<zahl; i++) {...} in der du immer zahl durch i rechen musst, das als float abspeichern, damit die nachkommastellen erhalten bleiben und überprüfen ob es das gleiche ist wie der integer (Ganzzahl). Sobalt für alle prüfungen außer bei i=1 oder i=zahl nicht gleich ist, ist es keine Primzahl. Aber sobalt einmal die Bedingung zutrifft ist es eine Primzahl.

Hoffe das kann trotzdem helfen :)

Liebe Grüße,

Nnifty23

0

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.

Woher ich das weiß:Studium / Ausbildung – Bachelor of Science

Kampfsorb  02.02.2018, 15:39

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

0

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:

  1. überprüfen, ob die Zahl positiv ist
  2. dann intelligent überprüfen, ob es zwischen 1 und der Zahl noch einen weiteren Teiler gibt
  3. wenn ja, dann ist die Zahl nicht prim
  4. 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


User785302 
Beitragsersteller
 02.02.2018, 16:06

Wow danke dir :)

2