C# :: Aufgabe #333 :: Lösung #1

3 Lösungen Lösungen öffentlich
#333

Goldbachsche Vermutung (binär)

Fortgeschrittener - C# von JKooP - 13.10.2020 um 08:32 Uhr
Die Goldbachsche Vermutung besagt, dass jede gerade Zahl größer 2 die Summe zweier Primzahlen ist.

1. Schreibe eine Funktion/Methode, die jeweils ein mögliches Primzahlenpaar bis zur Zahl 1000 ausgibt.

Beispiele:

4 = 2 + 2 -> (2, 2)
6 = 3 + 3 -> (3, 3)
8 = 3 + 5 -> (3, 5)

Duplikate durch Vertauschung wie z.B. (3, 5) -> (5, 3) sollen verhindert werden.

2. Schreibe eine Funktion/Methode, die alle mögliche Primzahlenpaare bis zur Zahl 1000 ausgibt.

Beispiele:

10 = 3 + 7 = 5 + 5 -> [ (3, 7), (5, 3) ]
14 = 3 + 11 = 7 + 7 -> [ (3, 11), (7, 7) ]

Viel Spaß
#1
vote_ok
von Waldgeist (2310 Punkte) - 18.10.2020 um 13:08 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;

namespace Aufgabe_333_Goldbachse_Vermutung
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            int berechneBisZahl = 200;
            List<int> primzahlen = new List<int>();
            int variante;

            Console.WriteLine("Gibt Primzahlenpaare bis zur Zahl 1000 aus\n\n");
            Console.WriteLine("Variante 1: Gib nur 1 Zahlenpaar aus");
            Console.WriteLine("Variante 2: Gibt alle Zahlenpaare aus");
            Console.Write("Ihre Auswahl: ");
            variante = Convert.ToInt32(Console.ReadLine());

            for (int i = 2; i <= berechneBisZahl; i++)   //1 ist keine Primzahl daher i=2
            {
                if (IstPrimzahl(i))                      //prüfen ob i eine Primzahl ist
                {
                    primzahlen.Add(i);                  //wenn ja in Liste aufnehmen
                }
                if ((i > 2) & (i % 2 == 0))             //Goldbachse Vermutung gilt nur für gerade Zahlen größer als 2
                {
                    Console.Write(i + " = ");
                    for (int j = 0; j <= (primzahlen.Count - 1); j++)   //durchläuft alle Primzahlen in Liste
                    {
                        if (primzahlen[j] > (i / 2))   //wenn Primzahl an index j größer als die Hälfte der zu prüfenden Zahl abbruch, verhindert doppelte Ausgabe
                        {
                            break;
                        }
                        else
                        {
                            for (int k = 0; k <= (primzahlen.Count - 1); k++)   //durchläuft nochmals alle Primzahlen in List
                            {
                                if (primzahlen[j] + primzahlen[k] == i)         //wenn die Summe der beiden Primzahlen die Zahl i ergibt
                                {
                                    Console.Write($" {primzahlen[j]} + {primzahlen[k]} , ");  //geben wir die Löung aus!
                                    if (variante == 1)
                                    {
                                        goto doublebreak;
                                    }
                                }
                            }
                        }
                    }
                    Console.WriteLine();
                }
            doublebreak:;
                Console.WriteLine();
            }

            //Methode zm prüfen ob Zahl eine Primzahl ist
            bool IstPrimzahl(int zuprüfendeZahl)
            {
                for (int i = 2; i < zuprüfendeZahl; i++)
                {
                    if (zuprüfendeZahl % i == 0)
                    {
                        return false;
                    }
                }
                return true;
            }
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2116340

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.