Primzahl

ifschleife

Mitglied
HI,
meine Aufgabe ist es zu überprüfen ob eine eingelesene Zahl eine Primzahl ist.
Soweit so gut, dies hab ich auch getan.
Nun bei der Ausgabe soll die Primzahl ausgegeben werden und ALLE Primzahlen die kleiner oder gleich dieser eingelesenen Zahl sind.
Die Primzahl an sich kann ich ausgeben, aber alle Primzahlen die kleiner oder gleich dieser eingelesenen Zahl nicht.
Mir ist klar, dass ich eine Art "counter" brauche um die Primzahlen auszugeben.
Ich bedanke mich schon im voraus für die Beiträge.
PS: Es ist wichtig hier ohne Arrays zu arbeiten.
11681
 

temi

Top Contributor
Du brauchst einfach eine Schleife, die von 2 bis zur eingegebenen Primzahl geht. In dieser Schleife prüfst du jedesmal, ob es sich beim aktuellen Schleifenzählerstand um eine Primzahl handelt und gibst diese aus, falls ja.
 

fhoffmann

Top Contributor
Ich würde damit anfangen, eine eigene Methode zu schreiben, die überprüft, ob eine Zahl eine Primzahl ist:
Java:
public static boolean istPrimzahl(int zahl) {
   // ...
}
 

mihe7

Top Contributor
Das ändert nichts am Prinzip:
Code:
n := eingelesene Zahl
i := 2
So lange i <= n ist, wiederhole:
  prüfe, ob i eine Primzahl ist
  i := i + 1
ende
Ob Du jetzt "prüfe, ob i eine Primzahl ist" an der Stelle direkt einbaust oder über einen Methodenaufruf erledigst, spielt für die Funktion keine Rolle.
 

ifschleife

Mitglied
Das ändert nichts am Prinzip:
Code:
n := eingelesene Zahl
i := 2
So lange i <= n ist, wiederhole:
  prüfe, ob i eine Primzahl ist
  i := i + 1
ende
Ob Du jetzt "prüfe, ob i eine Primzahl ist" an der Stelle direkt einbaust oder über einen Methodenaufruf erledigst, spielt für die Funktion keine Rolle.

Code:
 Ich habe mal versucht was du gesagt hast. Nun ist da ein Problem. "i"
 gibt nur ungeraden Zahlen aus, was natürlich nicht richtig ist. Wenn ich z.B. eine 9
 eingebe kommen alle ungeraden Zahlen bis 9 und gibt aus, dass die 9 eine Primzahl ist,
 was natürlich nicht stimmt.
 for (int i=2 ;i<zahl; i++) {   
            if (zahl %i == 0) {
            a = false;
            }
            if ( i < zahl) {
                i=i+1;
                System.out.println(i);
            }
        }
        if (a == true) {       
            System.out.println("Primzahl");
        }else {
            System.out.println("Keine Primzahl");
        }
 

ocsme

Top Contributor
Hallo ifschleife,
wie du überprüfst ob eine Zahl eine Primzahl ist hast du ja hin bekommen :)
Was das hier in deinem Code soll weiß ich zwar nicht so genau?
Java:
 if ( i < zahl) {
                i=i+1;
                System.out.println(i);
            }

Aber wenn du ein Intervall von Zahlen also von 2 bis 100 auf Primzahlen testen möchtest benötigst du eine weitere Schleife die von 2-100 Läuft. In dieser Schleife überprüfst du dann mit deiner Schleife die du ja schon hast ob diese Zahl eine Primzahl ist und kannst sie Ausgeben.

Mit einer Methode geht das ganze deutlich eleganter :) wenn Ihr noch keine Methoden hattet bzw. sie nicht nutzen dürft dann Konzentriere dich erst einmal nur darauf das es jetzt so läuft.


Hab mal 2 Lösungen dazu gepackt. Ich würde dir raten es noch einmal zu versuchen mit der 2ten Schleife drum herum :) danach kannst du ja nach schauen.

Vielleicht kannst du mir ja noch erklären was das stück code oben machen soll!

LG

Ohne Methode:
Java:
    int n=100;
        int k=2;
        
        while(n>2) {
            boolean prim=true;       
            for(int teiler=2;prim&&teiler<=k/2;teiler++) {
                if(k%teiler==0)
                    prim=false;
            }
            
            if(prim) {
                System.out.println(k);
            }
            k++;
            n--;
        }


mit Methode:
Java:
    public static boolean isPrim(int zahl) {
        if(zahl == 1)
            return false;
        if(zahl == 2)
            return true;
        if(zahl % 2 == 0)
            return false;
        int sqrt = (int) Math.sqrt(zahl);
        
        for(int teiler = 3;teiler<=sqrt;teiler+=2)
            if(zahl%teiler==0)
                return false;
        return true;
    }

    public static void main(String[] args) {
        
        for(int i=1;i<=50;i++)
            if(isPrim(i))
                System.out.println(i);
    }
 

Ähnliche Java Themen

Neue Themen


Oben