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

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
#3
vote_ok
von Neicul (120 Punkte) - 29.09.2014 um 10:28 Uhr
Quellcode ausblenden C#-Code
class Program
    {
        static void Main(string[] args)
        {
            int range;

            while (true)
            {
                long result = 1;
                Console.Write("Enter the range of the factors(1-x):");
                range = IntCheck(Console.ReadLine());
                List<int> factors=GetFactors(GetPrimes(range), range);
                foreach (int i in factors)
                {
                    result *= i;
                }
                Console.WriteLine("The smallest number divisible by those factors is:" + result);
                Console.ReadLine();
            }

        }


        //überprüft ob eine gültige Integer eingegeben wurde
        static int IntCheck(string eingabe)
        {
            int zahl;
            if (Int32.TryParse(eingabe, out zahl))
            {
                return zahl;
            }
            else
            {
                Console.Write("Enter a valid number:");
                return IntCheck(Console.ReadLine());
            }
        }

        //gibt uns eine Liste an Primzahlen die wir für die Faktorenzerlegung benötigen
        static List<int> GetPrimes(int range)
        {
            List<int> primes = new List<int>();
            bool prime = true;

            for (int i = 2; i <= range; i++)
            {
                for (int x = 2; x < i; x++)
                {
                    if (i % x == 0)
                    {
                        prime = false;
                        break;
                    }
                }
                if (prime)
                {
                    primes.Add(i);
                }
                prime = true;
            }
            return primes;
        }

        //gibt uns die Faktoren der auszurechnenden Zahl
        static List<int> GetFactors(List<int> primes, int range)
        {
            List<int> factors = new List<int>();
            long nmbr=1;

            for (int i = 1; i <= range; i++)
            {
                foreach (int p in primes)
                {
                    for(int x = 0;x<factors.Count;x++)
                    {
                        nmbr*=factors[x];
                    }

                    if(nmbr%i==0)
                    {
                        nmbr = 1;
                        break;
                    }
                    else if(i%p==0)
                    {
                        factors.Add(p);
                    }
                    nmbr = 1;
                }
            }
            return factors;
        }
    }

Kommentare:

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

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