none
Primzahlen berechnen RRS feed

Antworten

  • Hallo, so habe ich auchmal angefangen :). Hier ist der Quellcode von meinem Damaligen Projekt:

            static void Main(string[] args)
            {
                int start = 0;
                int end = 100;
    
                if(start == 2)
                    Console.WriteLine(2); //Einzige gerade Primzahl, darum schon am Anfang ausgeben, 
                                          //da in der Schleife nur ungerade Zahlen überprüft werden.
                if (start % 2 == 0) //Eventuelle Korrektur, da nur ungerade Zahlen überprüft werden sollen.
                    ++start;
                for (int i = start; i <= end; i+=2 ) //Nur Ungerade Zahlendurchgehen
                {
                    bool prime = true; //Handelt es sich um eine Primzahl?
                    for(int j = 3; j < i; ++j)
                    {
                        if(i % j == 0) //Alle Zahlen auf teilbarkeit überprüfen
                        {
                            prime = false; //Keine Primzahl
                            break; //Überprüfung abbrechen
                        }
                    }
                    if (prime && i >= 2) //Ausgabe, wenn Primzahl
                        Console.WriteLine(i);
                }
                Console.ReadKey();
            }

    Die variablen start und end sagen von wo bis wo die Primzahlen in der Konsole ausgegeben werden sollen.Ich müsste soweit alles kommentiert haben.

    Beachte bitte, das die Berechnung unter umstäden etwas länger dauern kann ;)

    Bezüglich des %-(Modulo)-Operators kannst du hier weiter lesen.


    Koopakiller - http://koopakiller.ko.ohost.de/

    • Als Antwort vorgeschlagen ltWPFgt Dienstag, 17. Juli 2012 17:17
    • Als Antwort markiert TesterA_2 Donnerstag, 19. Juli 2012 14:19
    Dienstag, 17. Juli 2012 13:36
    Moderator
  • Ich hätte da auch noch einen Lösungsvorschlag anzubieten :-) Implementiert wird der Algorithmus "Sieb des Eratosthenes". Ziel bei der Implementierung ist die leichte Verständlichkeit - daher auch der Wikipedialink.

    using System;
    
    namespace SampleNamespace
    {
        public class SampleClass
        {
            public static void Main()
            {
                // Zuerst einmal sorgen wir für sprechende Namen für den Status einer Zahl
                const int PRIM = 1;
                const int NOT_PRIM = 2;
                
                // End ist das letzte zu untersuchende Element
                int end = 100;
                int[] array = new int[end+1];
                
                // Wir fangen an zu sieben. Wenn wir das erste mal an eine Zahl kommen, dann ist sie prim, alle
                // vielfachen merken wir uns als nicht prim. Siehe auch:
                // http://de.wikipedia.org/w/index.php?title=Sieb_des_Eratosthenes&oldid=102847134
                for(int i = 2; i <= end; i++) {
                    if (array[i] == NOT_PRIM)
                        continue;
                    else {
                        array[i] = PRIM;
                        for (int j = i+i; j<=end; j = j+i) {
                            array[j] = NOT_PRIM;
                        }
                    }
                }
                
                // Zuletzt geben wir alle Zahlen aus, die wir als Primzahlen markiert haben
                for(int i = 2; i <= end; i++)
                    if (array[i] == PRIM)
                        Console.WriteLine("Prim: " + i);
            }
        }
    }
    

    Und ab morgen werden die Hausaufgaben wieder selbst gemacht ;-)

    • Als Antwort markiert TesterA_2 Donnerstag, 19. Juli 2012 14:19
    Donnerstag, 19. Juli 2012 08:12

Alle Antworten

  • Hallo, so habe ich auchmal angefangen :). Hier ist der Quellcode von meinem Damaligen Projekt:

            static void Main(string[] args)
            {
                int start = 0;
                int end = 100;
    
                if(start == 2)
                    Console.WriteLine(2); //Einzige gerade Primzahl, darum schon am Anfang ausgeben, 
                                          //da in der Schleife nur ungerade Zahlen überprüft werden.
                if (start % 2 == 0) //Eventuelle Korrektur, da nur ungerade Zahlen überprüft werden sollen.
                    ++start;
                for (int i = start; i <= end; i+=2 ) //Nur Ungerade Zahlendurchgehen
                {
                    bool prime = true; //Handelt es sich um eine Primzahl?
                    for(int j = 3; j < i; ++j)
                    {
                        if(i % j == 0) //Alle Zahlen auf teilbarkeit überprüfen
                        {
                            prime = false; //Keine Primzahl
                            break; //Überprüfung abbrechen
                        }
                    }
                    if (prime && i >= 2) //Ausgabe, wenn Primzahl
                        Console.WriteLine(i);
                }
                Console.ReadKey();
            }

    Die variablen start und end sagen von wo bis wo die Primzahlen in der Konsole ausgegeben werden sollen.Ich müsste soweit alles kommentiert haben.

    Beachte bitte, das die Berechnung unter umstäden etwas länger dauern kann ;)

    Bezüglich des %-(Modulo)-Operators kannst du hier weiter lesen.


    Koopakiller - http://koopakiller.ko.ohost.de/

    • Als Antwort vorgeschlagen ltWPFgt Dienstag, 17. Juli 2012 17:17
    • Als Antwort markiert TesterA_2 Donnerstag, 19. Juli 2012 14:19
    Dienstag, 17. Juli 2012 13:36
    Moderator
  • Ich hätte da auch noch einen Lösungsvorschlag anzubieten :-) Implementiert wird der Algorithmus "Sieb des Eratosthenes". Ziel bei der Implementierung ist die leichte Verständlichkeit - daher auch der Wikipedialink.

    using System;
    
    namespace SampleNamespace
    {
        public class SampleClass
        {
            public static void Main()
            {
                // Zuerst einmal sorgen wir für sprechende Namen für den Status einer Zahl
                const int PRIM = 1;
                const int NOT_PRIM = 2;
                
                // End ist das letzte zu untersuchende Element
                int end = 100;
                int[] array = new int[end+1];
                
                // Wir fangen an zu sieben. Wenn wir das erste mal an eine Zahl kommen, dann ist sie prim, alle
                // vielfachen merken wir uns als nicht prim. Siehe auch:
                // http://de.wikipedia.org/w/index.php?title=Sieb_des_Eratosthenes&oldid=102847134
                for(int i = 2; i <= end; i++) {
                    if (array[i] == NOT_PRIM)
                        continue;
                    else {
                        array[i] = PRIM;
                        for (int j = i+i; j<=end; j = j+i) {
                            array[j] = NOT_PRIM;
                        }
                    }
                }
                
                // Zuletzt geben wir alle Zahlen aus, die wir als Primzahlen markiert haben
                for(int i = 2; i <= end; i++)
                    if (array[i] == PRIM)
                        Console.WriteLine("Prim: " + i);
            }
        }
    }
    

    Und ab morgen werden die Hausaufgaben wieder selbst gemacht ;-)

    • Als Antwort markiert TesterA_2 Donnerstag, 19. Juli 2012 14:19
    Donnerstag, 19. Juli 2012 08:12
  • Danke für die beiden Antworten :)

    Nächstes mal mache ich meine Hausaufgaben selbst, aber ich stand irgendwie aufm Schlauch.

    Beide Algorithmen haben da wohl ihre Vorteile:

    @Koopakiller: Man kann Zahlenbereiche angeben.

    @mrparity: Dein Algorithmus läuft etwas schneller.

    Donnerstag, 19. Juli 2012 14:19
  • Hier noch eine Lösung, die ich besonders einfach und anschaulich finde:

    namespace Primzahlen
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Primzahlen zwischen 1 und 100: ");
    
                for (int i =2; i<100; i++)          //Jede Zahl zwischen 2 und 100.
                {
                    bool prim = true;               //Erstmal wird jede Zahl als Primzahl betrachtet.
                    for (int j=2; j<i; j++)         //Jede Zahl ´i´ wird durch die Zahl j<i geteilt.
                    {
                        if (i%j == 0)               //Nur wenn die Division keinen Rest ergibt, wird diese 
                        {                           //if-Schleife ausgeführt.
                            prim = false;           //Die aktuelle Zahl wird als keine Primzahl "markiert".
                            break;
                        }
                    }
                    if(prim==true)                  //Wenn die aktuelle Zahl ´i´ als Primzahl "markiert" ist
                    {                               //wird diese ausgegeben.
                        Console.WriteLine(i);
                    }
                }
                Console.ReadKey();
            }
        }
    }
           

    Hab mich hier von diesem gut erklärten Video inspirieren lassen :)

    https://www.youtube.com/watch?v=vFhdGMopfXU

    Donnerstag, 1. März 2018 19:29