C# :: Aufgabe #171 :: Lösung #2

4 Lösungen Lösungen öffentlich
#171

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.
#2
vote_ok
von hollst (13980 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(); }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben