C# :: Aufgabe #171
4 Lösungen
Symmetrische Primzahlen
Anfänger - C#
von hollst
- 03.04.2017 um 13:55 Uhr
Wieviele Primzahlen P < 1.000.000 sind rückwärts gelesen auch eine Primzahl, jedoch ungleich sich selbst?
Anmerkung: Die (Prim)zahlen 2, 3, 5, 7, 11 erfüllen nicht die Bedingungen (sind rückwärts gelesen sich selbst gleich),
als erste erfüllt die 13 die Bedingungen.
Anmerkung: Die (Prim)zahlen 2, 3, 5, 7, 11 erfüllen nicht die Bedingungen (sind rückwärts gelesen sich selbst gleich),
als erste erfüllt die 13 die Bedingungen.
Lösungen:
C#-Code
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleSymmetrischePrimzahlen { class Program { static void Main(string[] args) { List<string> primes = new List<string>() { }; for (int i = 11; i < 1000000; i += 2) { if (IsPrimeNumber(i)) { primes.Add(i.ToString()); } } var symm = from p in primes let r = new string(p.Reverse().ToArray()) where primes.Contains(r) && r != p select p; foreach (string s in symm) { Console.WriteLine(s); } Console.ReadLine(); } public static bool IsPrimeNumber(int number) { Dictionary<int, int> primes = PrimeFactorization(number); return primes.Count == 1 && primes.First().Value == 1; } public static Dictionary<int, int> PrimeFactorization(int a) { Dictionary<int, int> primes = new Dictionary<int, int>(); for (int b = 2; a > 1; b++) { if (a % b == 0) { int x = 0; while (a % b == 0) { a /= b; x++; } primes.Add(b, x); } } return primes; } } }
C#-Code
using System; using static System.Console; /* Wieviel Primzahlen P < 1.000.000 sind rückwärtz gelesen auch eine Primzahl, jedoch ungleich sich selbst? Anmerkung: Die Primzahlen 2, 3, 5, 7, 11 erfüllen nicht die Bedingung (sind rückwärtz gelesen sich selbst gleich), als erste erfüllt es die 13. */ namespace backprime{ class Program { static string LZ = " "; static void Main() { int maxi = (int)1E+6; ("maxi: " + maxi.ToString()).MessageLine(); int counter = 0, counter_prime = 0; for (var i = 2; i < maxi; i++) if (isPrime(i)) { counter_prime++; int b = backward(i); if (b != i && isPrime(b)) { (i.ToString("n0") + LZ + b.ToString("n0")).MessageLine(); counter++; } } (counter.ToString("n0") + " of " + counter_prime.ToString("n0") + " are not identical forward and backward primes.").MessageLine(); "ready".EndMessage(); } public static bool isPrime(int number) { if (number == 1) return false; if (number == 2) return true; var boundary = (int)Math.Floor(Math.Sqrt(number)); for (int i = 2; i <= boundary; ++i) if (number % i == 0) return false; return true; } public static int backward(int number) { if (number < 10) return number; int result = 0; int pot = (int)(Math.Log10(number)); int ipot = 1; for (var i = 0; i < pot; i++) ipot *= 10; while (ipot > 1) { int zehner = 10 * (number / 10); ; result += ipot * (number % zehner); number /= 10; ipot /= 10; } return result += number; } } static class MyExtensions { public static void MessageLine(this string s) { WriteLine(s); } public static void EndMessage(this string s) { WriteLine(s); ReadKey(); } } }
C#-Code
using System; internal static class Program { private static void Main() { int counter = 0; for (int i = 1; i < 1000001; i++) { if (!TestPrime(i) || i.ToString() == RotateString(i.ToString()) || !TestPrime(int.Parse(RotateString(i.ToString())))) { continue; } Console.WriteLine(i); counter++; } Console.WriteLine(counter); Console.ReadLine(); } private static bool TestPrime(int input) { switch (input) { case 1: return false; case 2: return true; } for (int i = 2; i < input; i++) { if (input % i == 0) { return false; } } return true; } private static string RotateString(string input) { string result = string.Empty; int length = input.Length; for (int i = length - 1; i > -1; i--) { result += input[i]; } return result; } }
C#-Code
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Primzahlen { class Program { static void Main(string[] args) { int counter = 1, maxCount = 100; for (int i = 2; i < maxCount; i++) { if (isPrime(i) && isPrime(reverseNumber(i)) && i != reverseNumber(i)) { Console.WriteLine(counter + ":\t" + i); counter++; } } Console.ReadLine(); } static bool isPrime(int n) { bool prime = true; for (int j = 2; j < n; j++) { if (n % j == 0) prime = false; } return prime; } static int reverseNumber(int n) { string newString = "", s = n.ToString(); for (int i = s.Length-1; i >= 0; i--) { newString += s[i]; } return Int32.Parse(newString.ToString()); } } }