C# :: Aufgabe #367
3 Lösungen

Palindromische Primzahlen
Anfänger - C#
von hollst
- 29.03.2021 um 21:12 Uhr
Man erzeuge eine Liste aller Primzahle <= 1 Milliarde (1E+9), die in dezimaler Präsentation umgekehrt gelesen ebenfalls eine Primzahl sind (Palindromische Primzahlen). Z. B. 13; 31 ist ebenfalls Primzahl.
Viel Spaß!
Viel Spaß!
Lösungen:
NET 5.x; C# 9.x; VS-2019
C#-Code

using System; using System.Collections.Generic; using System.Linq; GetPrimeList(1000).ForEach(x => Console.WriteLine(x)); static List<(int prime, int primeRev)> GetPrimeList(int max) { List<(int, int)> lst = new(); for (int i = 10; i <= max; i++) { if (IsPrime(i)) { var pr = GetRevNum(i); if (IsPrime(pr)) lst.Add((i, pr)); } } return lst; } static bool IsPrime(int n) => n > 1 && Enumerable.Range(1, n).Where(x => n % x == 0).SequenceEqual(new[] { 1, n }); static int GetRevNum(int num) { var rev = 0; while (num != 0) { rev *= 10; rev += (num % 10); num /= 10; } return rev; }

using static System.Console; using System.Collections.Generic; int n = (int)1e+9; WriteLine($"Palindromische Primzahlen bis {n.ToString("n0")}:"); bool[] b = Primes_Until(n); int counter = 0; for (var i = 2; i < b.Length; i++) if (!b[i] && !b[InversInt(i)]) WriteLine($"{(++counter).ToString("n0"), 10}: {i.ToString("n0"), 12}"); WriteLine($"fertig: insgesamt {counter.ToString("n0")} Palindromische Primzahlen bis {n.ToString("n0")}"); ReadKey(); #region methods static bool[] Primes_Until(int n) { bool[] b = new bool[n + 1]; for (var i = 4; i <= n; i += 2) b[i] = true; for (var i = 3; i <= n; i += 2) if (!b[i]) for (var j = i + i; j <= n; j += i) b[j] = true; return b; } static int InversInt(int i) { List<int> digits = new(); while (i > 0) { digits.Add(i % 10); i /= 10; } int pot = 1, result = 0; for (var j = digits.Count - 1; j >= 0; j--) { result += pot * digits[j]; pot *= 10; } return result; } #endregion
Hallo,
ich habe mich bei meiner Lösung an die Wikipedia Vorgaben gehalten. Das heißt 13 bzw. 31 ist kein Palindrom!
Da mein kleiner Laptop nicht so schnell ist habe ich als Ziel nur 100.000 eingegeben.
Hier der Code:
C#-Code
ich habe mich bei meiner Lösung an die Wikipedia Vorgaben gehalten. Das heißt 13 bzw. 31 ist kein Palindrom!
Da mein kleiner Laptop nicht so schnell ist habe ich als Ziel nur 100.000 eingegeben.
Hier der Code:

using System; namespace _367_Palindrome_Primzahlen { internal class Program { private static void Main(string[] args) { Console.WriteLine("Dieses Progremm ermittelt Palidromische Primzahlen"); uint berechneBisZahl = 100000; for (uint i = 2; i <= berechneBisZahl; i++) { if (IstPrimzahl(i)) { if (istPalindrom(i)) { Console.WriteLine(i); } } } bool IstPrimzahl(uint zuprüfendeZahl) { for (uint i = 2; i < zuprüfendeZahl; i++) { if (zuprüfendeZahl % i == 0) { return false; } } return true; } bool istPalindrom(uint zuprüfendePrimzahl) { string zahl = zuprüfendePrimzahl.ToString(); char[] c = zahl.ToCharArray(); string zahlrückwerts = ""; for (int i = (zahl.Length - 1); i >= 0; i--) { zahlrückwerts = zahlrückwerts + c[i]; } if (zuprüfendePrimzahl == Convert.ToUInt32(zahlrückwerts)) { return true; } return false; } } } }