C# :: Aufgabe #70 :: Lösung #13

14 Lösungen Lösungen öffentlich
#70

Finde die erste Zahl die durch alle Zahlen bis 30teilbar ist

Fortgeschrittener - C# von 96fabi - 25.09.2014 um 09:01 Uhr
Gesucht wird die erste Zahl, die durch alle Zahlen bis 30 geteilt werden kann(1-30).
Zum Einstieg kann man erstmal die erste Zahl suchen , die durch alle Werte bis 20 geteilt werden kann.
Dieses ist 232792560
#13
vote_ok
von hollst (13980 Punkte) - 10.11.2017 um 16:51 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Numerics;
using System.Diagnostics;

namespace aufgabe_70    {

    static class Program    {

        static void Main()  {

            Stopwatch sw = new Stopwatch();

            sw.Start();
            Console.WriteLine(((BigInteger)1E+5).main());
            Console.WriteLine(sw.Elapsed.ToString());

            sw.Restart();
            Console.WriteLine(((BigInteger)4E+4).main());
            Console.WriteLine(sw.Elapsed.ToString());

            sw.Restart();
            Console.WriteLine(((BigInteger)20).main());
            Console.WriteLine(sw.Elapsed.ToString());

            sw.Restart();
            Console.WriteLine(((BigInteger)30).main());
            Console.WriteLine(sw.Elapsed.ToString());

            Console.ReadKey(true);
        }

        static string main(this BigInteger bis)        {
            BigInteger[] primes = bis.primes_until();
            BigInteger erg = 1;
            for (var i = 0; i < primes.Length; i++)            {
                BigInteger p = primes[i];
                while (p * primes[i] <= bis)
                    p *= primes[i];
                erg *= p;
            };
            return (erg.ToString("n0"));
        }

        static BigInteger[] primes_until(this BigInteger m)        {
            List<BigInteger> p = new List<BigInteger>(); p.Add(2);
            for (BigInteger i = 3; i <= m; i += 2)            {
                bool bo_isprime = true;
                for (var j = 0; j < p.Count; j++)
                    if (i % p[j] == 0)
                    { bo_isprime = false; break; }
                if (bo_isprime)
                    p.Add(i);
            }
            return p.ToArray();
        }
    }
}

Kommentare:

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

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