Le plus grand diviseur commun à partir d'un ensemble de plus de 2 nombres entiers
Il y a plusieurs questions sur un Débordement de Pile à discuter de la façon de trouver le Plus grand Commun Diviseur de deux valeurs. Une bonne réponse montre une nette fonction récursive pour ce faire.
Mais comment puis-je trouver le PGCD d'un ensemble de plus de 2 nombres entiers? Je n'arrive pas à trouver un exemple de cela.
Quelqu'un peut-il suggérer le code le plus efficace pour mettre en œuvre cette fonction?
static int GCD(int[] IntegerSet)
{
//what goes here?
}
source d'informationauteur BG100
Vous devez vous connecter pour publier un commentaire.
Et ici, vous avez un exemple de code à l'aide de LINQ et PGCD méthode à partir de la question que vous avez associé. C'est à l'aide théorique de l'algorithme décrit dans d'autres réponses ...
GCD(a, b, c) = GCD(GCD(a, b), c)
Vous pouvez utiliser cette propriété commune d'un PGCD:
En supposant que vous avez
GCD(a, b)
déjà défini, il est facile de généraliser:Voici la version C#.
Source http://www.java2s.com/Tutorial/Java/0120__Development/GreatestCommonDivisorGCDofpositiveintegernumbers.htm
Wikipedia:
Il suffit de prendre le pgcd des deux premiers éléments, puis de calculer le pgcd de résultat et le troisième élément, puis de calculer le pgcd des résultats et de la quatrième élément...
La réécriture de ce qu'une seule fonction...
gcd(a1,a2,...,an)=gcd(a1,gcd(a2,gcd(a3...(gcd(a(n-1),an)))))
donc, je le ferais juste étape par étape abandon si certainsgcd
évalue à 1.Si votre tableau est trié, il pourrait être plus rapide pour évaluer
gcd
pour les petits nombres plus tôt, puisque, alors il peut être plus probable que l'ungcd
évalue à 1 et vous pouvez l'arrêter.Le code Source de référence
Ce sont les trois communes les plus utilisés:
Sans l'aide de LINQ.
PGCD(a, b, c) = PGCD(a, PGCD(b, c)) = PGCD(PGCD(a, b), c) = PGCD(PGCD(a, c), b)
public class Program { static void main() { Console.WriteLine(PGCD(nouveau[] { 10, 15, 30, 45 })); } static int PGCD(int a, int b) { return b == 0 ? a : PGCD(b, a % b); } static int PGCD(int[] integerSet) { return integerSet.Agrégation(PGCD); } }