JS как найти наибольший общий делитель [закрыт]
Я хотел бы найти наибольший общий делитель с помощью JavaScript.
кто-нибудь делал это раньше и готов поделиться?
3 ответов
вот рекурсивное решение.
var gcd = function(a, b) {
if ( ! b) {
return a;
}
return gcd(b, a % b);
};
наш базовый случай, когда b
равна 0
. В этом случае, мы возвращаемся a
.
когда мы рекурсией, мы поменяем входные аргументы, но мы проходим оставшуюся часть a / b
в качестве второго аргумента.
взято из Википедии.
рекурсивные:
function gcd_rec(a, b) {
if (b) {
return gcd_rec(b, a % b);
} else {
return Math.abs(a);
}
}
итерационного:
function gcd(a,b) {
a = Math.abs(a);
b = Math.abs(b);
if (b > a) {var temp = a; a = b; b = temp;}
while (true) {
if (b == 0) return a;
a %= b;
if (a == 0) return b;
b %= a;
}
}
- отредактировано в комментарии пользователя
function egcd(a, b) {
if (a == 0)
return b;
while (b != 0) {
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}