Primzahlen

sebi04.04

Mitglied
Hallo liebes Forum,

habe wiedereinmal ein Problem beim programmieren und ich hoffe ihr könnt mir helfen:

Wir sollen ein Programm schrieben das bei allen Zahlen von 1 bis 100 testet, ob sie

  1. durch 3 teilbar sind
  2. nicht durch 5 aber durch 4 teilbar sind
  3. Primzahlen sind

Beim letzteren liegt mein Problem ich kriege einfach die Primzahlenberechnung nicht zustande :shock:!

Vielleicht ist es ja nur ein grober Denkfehler, hoffe ihr könnt mir helfen.

Übrigens : Primzahlen sind Zahlen die nur durch 1 und durch sich selber teilbar sind.

Java:
public class Primzahlen  {
  public static void main (String [] arg){
  System.out.println ("Primzahlen-tester\n");
  int i,x,y,w,p;
  x=0;
  y=0;
  w=0;
  p=0;
  for(i=1; i<100; i++){
    System.out.print( i + "\n" );
    x = i % 3;
    
    if(x == 0){
    System.out.print("Die Zahl ist durch 3 Teilbar\n");
    }else{
      System.out.print("Die Zahl ist nicht durch 3 Teilbar\n");
    }
    if (i%5 != 0){
      if (i%4 == 0){
        System.out.print("Die Zahl ist nicht durch 5 aber durch 4 Teilbar\n");
      }else{
        System.out.print("Die Zahl weder durch 5 noch durch 4 Teilbar\n");
      }
    }else{
      System.out.print("Die Zahl ist durch 5 aber nicht durch 4 Teilbar\n");
    }
    for (int z=2; z<i;z++){
      w = i % z;
      if ( w == 0){
           p++;
      }else{
       if (p == 2){
           System.out.print ("primzahl");
           break;
       }else{
           System.out.print (" keine primzahl");
           break;

       }
      }
    }
    }



    
  }

}
lg sebi
 
Tipp zu Primzahl:
du musst erst die gesamte Schleife durchlaufen bis ein positives Ergebnis feststeht,
wenn du erst nur die 2 prüfst kann in diesem Schritt nicht schon eine Ausgabe erfolgen
 
Eine Primzahl lässt sich nur durch 1 und sich selber Teilen. Da kommen auch die 2 Teiler her. Deine Schleife läuft aber von 2 bis einschließlich
Code:
i-1
. Demzufolge musst du überhaupt keine Teiler finden, somit ist dein
Code:
p
bei Primzahlen 0.
Und die if-Abfrage mit
Code:
if (p==0)
musst du erst nach der Schleife machen, wenn auch alles untersucht wurde.
 
Hi,
habe nochmal überarbeitet, und die If-abfrage nach unten gesetzt.

Java:
 public class Primzahlen  {
  public static void main (String [] arg){
  System.out.println ("Primzahlen-tester\n");
  int i,x,y,w,p;
  x=0;
  y=0;
  w=0;
  p=0;
  for(i=1; i<100; i++){
    System.out.print( i + "\n" );
    x = i % 3;
    
    if(x == 0){
    System.out.print("Die Zahl ist durch 3 Teilbar\n");
    }else{
      System.out.print("Die Zahl ist nicht durch 3 Teilbar\n");
    }
    if (i%5 != 0){
      if (i%4 == 0){
        System.out.print("Die Zahl ist nicht durch 5 aber durch 4 Teilbar\n");
      }else{
        System.out.print("Die Zahl weder durch 5 noch durch 4 Teilbar\n");
      }
    }else{
      System.out.print("Die Zahl ist durch 5 aber nicht durch 4 Teilbar\n");
    }
    for (int z=2; z<i;z++){
      w = i % z;
      if ( w == 0){
           p++;
      }


    }
    if (p == 0){
           System.out.print ("primzahl");
           break;
       }else{
           System.out.print (" keine primzahl");
           break;

       }
    }



    
  }

}

Jetzt hört er schon bei der Zahl 3 auf zu zählen! ich verstehe die ganze aktion nicht !
 
Du musst ja auch die
Code:
break
's wegmachen, sonst beendet er ja die äußere Schleife
 
In Zeile 25 kannst du noch nicht behaupten, dass die Zahl nicht durch 4 teilbar wäre. In diesem else-Zweig müsstest du auch noch mal die if-Abfrage von Zeile 19 machen.
 
Du machst in Zeile 35 auch einen Fehler.
Ab Zahl 4 kann p nie mehr null sein... deshalb wird dein programm auch keine primzahlen finden die grösser sind als 4 sprich also z.B. 5...
 
Du machst in Zeile 35 auch einen Fehler.
Ab Zahl 4 kann p nie mehr null sein... deshalb wird dein programm auch keine primzahlen finden die grösser sind als 4 sprich also z.B. 5...

Warum das?
[EDIT]
Ah, ok,
Code:
p
zurücksetzen. Hörte sich so an, als ob du was gegen den Algo hättest
[/EDIT]
 
Hallo Zusammen,
da ich nicht mehr durchgeblickt habe habe ich alles noch einmal zurückgesetzt und frage euch nun, was muss ich machen damit er ausgibt : primzahl oder eben nicht ?

Habe keine idee mehr.

Java:
public class Primzahlen  {
  public static void main (String [] arg){
  System.out.println ("Primzahlen-tester\n");
  int i,x,y,w,p,l;
  x=0;
  y=0;
  w=0;
  p=0;
  l=0;
  for(i=1; i<10; i++){
    System.out.print( i + "\n" );
    /*x = i % 3;
    
    if(x == 0){
    System.out.print("Die Zahl ist durch 3 Teilbar\n");
    }else{
      System.out.print("Die Zahl ist nicht durch 3 Teilbar\n");
    }
    if (i%5 != 0){
      if (i%4 == 0){
        System.out.print("Die Zahl ist nicht durch 5 aber durch 4 Teilbar\n");
      }else{
        System.out.print("Die Zahl weder durch 5 noch durch 4 Teilbar\n");
      }
    }else{
      System.out.print("Die Zahl ist durch 5 aber nicht durch 4 Teilbar\n");
    } */
    for (int z=2; z<i;z++){
    w = i % z;
    if ( w != 0){
      System.out.print ("Primzahl\n");
    }else {
      System.out.print ("Keine Primzahl\n");
    }
    }
    }



    
  }

}

lg
 
Wie bereits gesagt: zwischen Zeile 10 und 11 musst du
Code:
p
auf 0 setzen.
Warum da jetzt plötzlich was ganz anderen ab Zeile 28 steht, ist mir ein Rätsel, vorhin war es bis auf die break's richtig.
 
Java:
public class Primzahlen  {
  public static void main (String [] arg){
  System.out.println ("Primzahlen-tester\n");
  int i,x,y,w,p;
  x=0;
  y=0;
  w=0;
  p=0;
  for(i=1; i<100; i++){
    System.out.print( i + "\n" );
    x = i % 3;
    
    if(x == 0){
    System.out.print("Die Zahl ist durch 3 Teilbar\n");
    }else{
      System.out.print("Die Zahl ist nicht durch 3 Teilbar\n");
    }
    if (i%5 != 0){
      if (i%4 == 0){
        System.out.print("Die Zahl ist nicht durch 5 aber durch 4 Teilbar\n");
      }else{
        System.out.print("Die Zahl weder durch 5 noch durch 4 Teilbar\n");
      }
    }else{
      System.out.print("Die Zahl ist durch 5 aber nicht durch 4 Teilbar\n");
    }
    for (int z=2; z<i;z++){
      w = i % z;
      if ( w == 0){
           p++;
      }
 
 
    }
    if (p == 0){
           System.out.print ("primzahl");
            break;  // Hier das break entfernen!
       }else{
           System.out.print (" keine primzahl");
           break;  // Hier  das break entfernen!
           p = 0; // Und hier p unbedingt zurückgesetzen
       }
    }
 
 
 
    
  }
 
}
 
Es hat endlich geklappt vielen Dank !

Danke an Hemme, der sich die Mühe gemacht hat mir das einmal dort einzufügen und zu veranschaulichen.:toll:

lg sebi
 

Neue Themen


Zurück
Oben