43 votes

quel est le moyen le plus rapide de trouver le pgcd de n nombres ?

Quel est le moyen le plus rapide de calculer le plus grand commun diviseur de n nombres ?

19voto

dogbane Points 85749

Sans récursivité :

 int result = numbers[0];
for(int i = 1; i < numbers.length; i++){
    result = gcd(result, numbers[i]);
}
return result;

Pour les très grands tableaux, il peut être plus rapide d'utiliser le modèle fork-join, dans lequel vous divisez votre tableau et calculez les pgcd en parallèle. Voici un pseudo-code :

 int calculateGCD(int[] numbers){
    if(numbers.length <= 2){
        return gcd(numbers);    
    }
    else {
        INVOKE-IN-PARALLEL {
            left = calculateGCD(extractLeftHalf(numbers));
            right = calculateGCD(extractRightHalf(numbers));
        }
        return gcd(left,right);
    }
}

17voto

lhf Points 30556

Vous pouvez d'abord trier les nombres et calculer le pgcd de manière récursive en partant des deux plus petits nombres.

3voto

akjlab Points 160

Vous devez utiliser l'algorithme GCD de Lehmer .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X