Quel est le moyen le plus rapide de calculer le plus grand commun diviseur de n nombres ?
Réponses
Trop de publicités?
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);
}
}
lhf
Points
30556
Vous devez utiliser l'algorithme GCD de Lehmer .