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:
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;
}
}
}
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(); }
}
}
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;
}
}
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());
}
}
}
