Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 160
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Größter gemeinsamer Teiler


Autor: Klemens Nanni
Sprache: VB.NET
Bewertung:
4.11 (2 votes)
Anzahl der Aufrufe: 4740
  
Kick it on dotnet-kicks.de  

Beschreibung:

Diese Funktion berechnet iterativ den größten gemeinsamen Teiler(ggT) zweier ganzen Zahlen a & b.

Verglichen mit einer rekursiven Methode, ist der iterative Weg um einiges schneller.


Abgelegt unter: größter, gemeinsamer, Teiler, ggT, gcd, iterativ, Iteration, rekursiv, Rekursion, mathe.



Visual Basic
1
2
3
4
5
6
7
8
9
Function ggT(ByVal a As Integer, ByVal b As Integer) As Integer
    While b > 0
        ggT = a Mod b
        a = b
        b = ggT
    End While

    Return a
End Function
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

regalis schrieb am:  24.03.2010 08:27:28

Also irgendwie übersteigt der Ausdruck "a = b" mein Verständnis :D
regalis schrieb am:  24.03.2010 08:39:37

Ich hab diese C#-Methode gefunden....sieht sinnvoller aus:
public static long GetGCD(long Number1, long Number2)
{
long remainder = 0;
do
{
remainder = Number1 % Number2;
Number1 = Number2;
Number2 = remainder;
} while (remainder != 0);
return Number1;
}
Klemens Nanni schrieb am:  24.03.2010 15:49:12

Ein kleiner, aber wesentlicher Fehler in der While-Schleife wurde ausgemerzt.

regalis, deine Funktion greift auf eine weitere, nicht zwingend notwendige Variable zurück. Sie ist weder sinnvoller noch schneller, eher im Gegenteil.
regalis schrieb am:  24.03.2010 16:21:06

Ich verstehe deine Logik nicht...sobald du "a=b" machst ist der Wert in a futsch...
Oder übersehe ich da eine raffinierte Mechanik in deinem Algorithmus!?
Klemens Nanni schrieb am:  24.03.2010 22:07:04

Falls du glaubst, die Funktion überschreibt a bevor sie sie verwendet, hast du nur zur Hälfte Recht.
Zwar wird a = b gesetzt, jedoch rechnet der Computer intern mit Kopien der Variablen, der eigentliche Wert verändert sich nicht.
regalis schrieb am:  25.03.2010 07:37:07

Ich habe jetzt extra ein VB-Project erstellt um deine Aussage zu testen(weil ich noch nie mit VB gecoded habe und nicht sicher war ob du nicht doch recht hast).
Und stell dir vor was ich entdeckt hab....
a wird von b überschrieben und a mod b ergibt sofort 0
Somit ist der Rückgabewert IMMER b!
Klemens Nanni schrieb am:  25.03.2010 14:08:24

Oh,
meine schlecht gewählten Testzahlen haben diese Lücke gut versteckt. Ich danke dir, der Code wurde soeben ergänzt.


Diese Snippets könnten für Sie interessant sein:
[VB.NET] Größter gemeinsamer Teiler (2)
[C#] Integers
[C#] "echte" Teiler Summe berechnen
[VB.NET] Primfaktorzerlegung
[VB.NET] Kleinster natürlicher Teiler > 1
[C#] größten gemeinsamen Teiler berechnen.
[VB.NET] Binomialkoeffizient
[VB.NET] Fibonacci-Folge iterativ erzeugen
[C#] rekursiver Verzeichnislauf
[C#] Eigenschaften aller Steuerlemente eines Formulars setzen
[C#] Treeview rekursiv durchsuchen
[VB.NET] Ordergröße rekursiv bestimmen
[C#] Dateien und Ordner rekursiv löschen
[C#] Ordnergröße ermitteln
[C#] Ordner und Dateien rekursiv durchlaufen
[C#] Ordner mit Inhalt kopieren (rekursiv)
[C#] FTP - Ordner Rekursiv erstellen
[C#] Dateien mit bestimmter Extension rekursiv in Array einlesen
[C#] Erzeugen von Zeichenfolgen durch Permutation
[C#] Verhindern das Funktion rekursiv aufgerufen wird.
[C#] C# Ordner auslesen und in Liste speichern "rekursiv"
[C#] Rekursion Treeview
[C#] Summe 1..n berechnen
[C#] Fibonacci-Folge berechnen
[C#] n-te Fibonaccizahl rekursiv berechnen
[C#] Summe 1²...n² berechnen.
[C#] Summe 1³..n³ berechnen.
[VB.NET] Multiplikation von übergroßen Zahlen
[C#] Dreiecksberechnung
[VB.NET] PI nach der Bailey-Borwein-Plouffe-Formel berechnen
[VB.NET] Quadratische Gleichung mit der PQ Formel lösen
[VB.NET] Basisrechenfunktionen für einen Kreis
[C++] Exponents
[C#] Quersummenberechnung
[C#] Geodaten in sexagesimal Format umrechnen
[VB.NET] Größten gemeinsamen Teiler berechnen
[VB.NET] Quadratwurzel ohne Sqrt() Funktion ziehen
[C#] Addiere alle ganzen Zahlen von x bis y
[C++] Caesar
[C#] Formelevaluierung aus RPN Form
[C#] Prüfung auf narzisstische Zahlen
[C#] CellMatrix
[C#] Maschinengenauigkeit
[C#] Flächenberechnungen am Kreis,Quadrat,Parallelogramm,Trapez
[C#] Bruch-Klasse
[VB.NET] einfacher rekursiver Mathe Parser
[VB.NET] Permutation nachweisen
[VB.NET] Das Sieb des Eratosthenes
[VB.NET] Modulare Exponentation
[VB.NET] Das Sieb von Atkin
[VB.NET] Das Sieb von Atkin (2)
[VB.NET] Werte zweier Variablen tauschen
[VB.NET] Ganzzahlige Wurzel
[VB.NET] Binäre Exponentation
[VB.NET] Das Sieb von Atkin (2) - aktuell
[VB.NET] Dezimalzahl in Zahl der Basis b < 37 konvertieren

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.