Primzahlen - es werden alle Nicht-Primzahlen ausgegeben

minni.maus

Mitglied
Hallo,

wir müssen für die Schule einen Code schreiben, der alle Primzahlen von 1 - 100 ausgibt und in einer Text-Datei speichert.
Der erste Teil der Aufgabe war, dass der Benutzer eine Zahl eingibt und dann angezeigt wird, ob es eine Primzahl ist oder nicht. Jetzt sollen aber alle Zahlen von 1 - 100 ausgegeben werden und zwar nur die, die Primzahlen sind. Ich habe es jetzt soweit, dass ich alle Zahlen ausgeben kann die keine Primzahlen sind. Gibt es eine Möglichkeit, genau die umgekehrten auszugeben?
Ich überprüfe nämlich ob irgendwann ==0 herauskommt, dann ist es keine Primzahl. Aber einfach !=0 zu schreiben geht ja nicht, weil jede Zahl irgendeinen Rest hat.
Ich habe mich nun schon Studen damit beschäftigt und auch im Internet viel viel gelesen, aber wirklich weitergebracht hat es mich nicht.
Vielleicht kann mir jemand helfen?

Java:
 import java.io.*;

public class ChallengeFourteen
{
	public static void main (String [] args) throws IOException
	{	
		PrintWriter outputFile = new PrintWriter("ChallengeFourteenDatei.txt");
		
		for (int testen = 1; testen <= 100; testen++) 
		{
			double isPrimeAufrufen = isPrime(testen);
			if (isPrimeAufrufen != 0)
			outputFile.println(testen);
		}
		outputFile.close();
	}
	
	public static double isPrime(int testen) throws IOException
	{	
		int i = 2;

		for (i = 2; i < testen; i++)
		{
			double isPrimeResult = testen % i;	
			return isPrimeResult;
		}
		return 20; //habe hier einfach irgendwas geschrieben wegen der Meldung missing return statement
	}	
}
 
Du könntest dir z.B alle nicht Primzahlen von 1 bis 100 merken. Danach kannst du einfach die Primzahlen von 1 - 100 ausgeben.

Deine for-Schleife in isPrime-Methode ist übrigens nicht korrekt.

Außerdem gibt eine isXXX Methode in der Regel ein boolean zurück. Das wäre in deinem Fall auch zu empfehlen.
 
Zuletzt bearbeitet:
Hast du schon mal was vom Sieb des Eratosthenes gehört?
Schau mal ein bissel im Internet, da findest ganz schnell was darüber.
Allgemein läuft es wie folgt ab:
Zunächst solltest du wissen,dass Primzahlen nur durch sich selbst und durch 1 teilbar sind.
Nun gehst du durch deine Zahlenliste und streichst für jede Zahl die vielfache aus deiner Liste heraus. Zum Beispiel:
2 --> 4,6,8,10,12,14,16,18....
Das machst du mit jeder Zahl in deiner Liste, wodurch zu guter letzt nur noch die Primzahlen übrig bleiben.

Viel Glück 😉
 
Du könntest deine isPrime Methode auch zu folgendem ändern:

Java:
public static boolean isPrime(int testen)
    {   
        int i = 2;
        double isPrimeResult = 0;
 
        for (i = 2; i < testen; i++)
        {
            if((isPrimeResult = testen % i) == 0){
             return false;
            }
        }
        return true; //Wenn oben nirgends eine Zahl gefunden wo mod i = 0 ist, dann isses ne Primzahl
       
    }

Muss natürlich noch ne Zeile für die 1 rein und deine main Methode angepasst werden, aber ansonsten sollte es gehen.
 
Moin,

Du musst die Schleife auch nur bis testen/2 durchlaufen, da Zahle darüber für den Test nicht relevant sind, hier würde immer ein Rest zurück gegeben werden.

GuPhisch
 

Zurück
Oben