C# :: Aufgabe #171

3 Lösungen Lösungen öffentlich

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.

Lösungen:

vote_ok
von daniel59 (2860 Punkte) - 04.04.2017 um 09:06 Uhr
Quellcode ausblenden 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;
        }
    }
}
vote_ok
von hollst (6850 Punkte) - 19.04.2017 um 09:08 Uhr
Quellcode ausblenden 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(); }
    }
}
vote_ok
von kjaenke (610 Punkte) - 04.07.2017 um 08:09 Uhr
Quellcode ausblenden 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;
        }
    }