c# prüfen ob Primzahl?

5 Antworten

Das Was Desantrix schon gesagt hat.

Grndsätzlich als tipp:

Wenns dus nicht selbst per Hand aufm papier kannst. Wird es sich schlech in code umsetzen lassen.

Was ich damit meine ist: Es ist sinnvoll zu wissen wie etwas geht. bevor man es Coded.

In deinem beispiel wäre der richtige weg ersteinmal zu schauen wie man eigentlich herausfindet was denn eine Primzahl ist.

Da kann einem google entsprechen weiterhelfen und einem mathematische formeln geben. etc.

Ein naiver ansatz ist schlichtweg:

Wenn eine Primzahl nur durch sich selbst und 1 teilbar ist. Müssen wir einfach nur alle anderen zahlen ausprobieren.

Dabei können wir schonmal alle zahlen auschliessen die grösser sind als die zahl selbst. Weil die sind alle nicht teilbar.

Alle negativen können wir auch weglassen weil die analog zu den positiven funktionieren. (Was durch 2 teilbar ist ist auch durch -2 teilbar. etc.)

Was übrig bleibt sind alles zahlen von 2 bis zur eingegebenen zah l -1

Wenn wir nun also 5 eingeben. Müssen wir diese zahl durch 2, 3 und 4 teilen.

Dann ist natürlich sinnvoll zu wissen wie man den Rest einer zahl herausfindet (Modulo rechnung.)

Ist der rest 0. Ist sie teilbar. Ansonsten nicht.

Wenn man das alles zusammen hat. Kann man das theoretisch auf papier machen.

Und anschliessend muss man nur noch das was man macht in code umwandeln.

In dem Beispiel halt mit ner for schleifen.

Es gibt sicherlich Effizientere methoden herauszufinden was ne primzahl ist. Weil wenn wir 72389363468234 eingeben. Dann müssen wir soviele rechnungen durchführen. Bis wir nen ergebniss haben. und das kann das ggf. ein klein wenig dauern.

Wenn du eine Variable durch exakt dieselbe Variable teilst erhältst du IMMER den Wert 1.

Deshalb wird dein Programm immer behaupten es würde sich um eine Primzahl handeln, selbst bei Zahlen die gar keine Primzahlen sind.

Eine Primzahl ist eine Zahl die nur durch 1 und sich selbst teilbar ist...

Ich schreibe dir den Code jetzt sicherlich nicht, so viel sei aber gesagt, du brauchst für das Testen einer Primzahl n eine for-Schleife die <= n läuft. Bei jedem Durchlauf testest du, ob mit dem %-Operator (Modulo) bei der Division ein Rest bleibt.

Sollte dies nur bei 1 und bei der Zahl n selbst der Fall sein, so handelt es sich um eine Primzahl. Andernfalls nicht.

Übernehme keine Haftung.

namespace PrimePower
{
    internal class Program
    {
        private static bool isDividable(int number)
        {
            for (int i = 2; i < number; i++)
                if (number % i == 0)
                    return false;

            return true;
        }

        private static bool isPrime(int number)
        {
            return (isDividable(number) || number == 2 );
        }

        static void Main(string[] args)
        {
            Console.WriteLine(isPrime(7));
        }
    }
}

Diesen Fall überlasse ich aber dir :)

number == 1

Viel Spaß :)

Zahl/Zahl ist immer 1 und Zahl/1 ist auch immer Zahl. Du überprüfst also überhaupt nichts. Zahl/Zahl wird für Zahl = 0 wahrscheinlich nen Error auswerfen