Feedback

C# - Größter gemeinsamer Teiler

Veröffentlicht von am 22.12.2015
(0 Bewertungen)
Diese Funktion ermittelt den größten gemeinsamen Teiler mehrerer Zahlen. Dabei wird die Primfaktorzerlegung genutzt. Dafür wird eine angepasste Version von diesem Snippet: http://dotnet-snippets.de/snippet/primzahlenermittlung-primfaktorzerlegung/1725 genutzt.
GFU-Schulungen  [Anzeige]

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.

public static int GetGreatestCommenDivisor(IEnumerable<int> source)
        {
            Dictionary<int, int> primes = new Dictionary<int, int>();
            bool firstRun = true;
            foreach (int i in source)
            {
                if (firstRun)
                {
                    firstRun = false;
                    primes = PrimeFactorization(i);
                }
                else
                {
                    Dictionary<int, int> temp = PrimeFactorization(i);
                    foreach (var item in temp)
                    {
                        if (primes.ContainsKey(item.Key))
                        {
                            if (primes[item.Key] > item.Value)
                            {
                                primes[item.Key] = item.Value;
                            }
                        }

                        for (int j = 0; j != primes.Count; j++)
                        {
                            int key = primes.Keys.ElementAt(j);
                            if (!temp.ContainsKey(key))
                            {
                                primes[key] = 0;
                            }
                        }
                    }
                }
            }

            int maxDivisor = 1;
            foreach (var item in primes)
            {
                maxDivisor *= Convert.ToInt32(Math.Pow(item.Key, item.Value));
            }
            return maxDivisor;
        }

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;
        }
Abgelegt unter Primfaktorzerlegung, .

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!