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

#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. 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

von JKooP (18090 Punkte)
- 03.01.2021 um 10:52 Uhr
NET 5.x; C# 8.x
Lösung 2:
C#-Code
Lösung 2:

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
Seite 1 von 0
1