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

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ß
#3
vote_ok
von JKooP (18090 Punkte) - 03.01.2021 um 10:52 Uhr
NET 5.x; C# 8.x
Lösung 2:
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

namespace CS_MDL_CORE_Goldbach
{
    class Program
    {
        static void Main(string[] args)
        {
            var lstPairs = new List<(int n, int p1, int p2)>();

            for (int i = 4; i <= 1000; i+=2)
            {
                var lstPrime = Enumerable.Range(0, i).Where(x => IsPrime(x)).ToList();

                for (int k = 0; k < lstPrime.Count(); k++)
                {
                    for (int l = 0; l < lstPrime.Count(); l++)
                    {
                        if (lstPrime[k] + lstPrime[l] == i)
                        {
                            if (!lstPairs.Contains((i, lstPrime[l], lstPrime[k])))
                                lstPairs.Add((i, lstPrime[k], lstPrime[l]));
                        }
                    }
                }
            }
            lstPairs.GroupBy(t => t.n).Select(g => new { id = g.Key, values = g.Select(x => Tuple.Create(x.p1, x.p2)).ToList() }).ToList().ForEach(x => Console.WriteLine($"{x.id} -> {string.Join(", ", x.values)}"));
        }

        static bool IsPrime(int n) => n > 1 && Enumerable.Range(1, n).Where(x => n % x == 0).SequenceEqual(new[] { 1, n });
    }
}

Kommentare:

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

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