02. Greatest Common Divisor GCD
Здравейте, може ли някой да ми каже защо имам 57/100 ?
https://pastebin.com/xfS5dBFj
Здравейте, може ли някой да ми каже защо имам 57/100 ?
https://pastebin.com/xfS5dBFj
Здравей,
В задачата се изисква да се намери най-голямото число, на което могат да се разделят и двете получени числа без остатък.
При твоето решение въртиш цикъл от 2 до 10 и принтираш ако и двете се делят без остатък.
-Така не хващаш ако най-голямото такова число е 1, например вход (5,11).
-Изписваш не най-голямото, а всички подред. Например при вход (6,12), ще изпишеш- 2, после 3, после 6
-Не изписваш, ако най-голямото е повече от 10. Напр (11,22). Тук трябва да е 11.
Ето едно лесно решение:
При делене ако делителя е по-голям от делимото се получава дроб. Затова най-голямото възможно число, на което и двете от входа се делят без остатък е по-малкото от двете. Може да намериш по-малкото от двете и да направиш цикъл от него до 0. Като при първото намерено да принтираш и да спираш цикъла:
function gcd(num1, num2) {
let smallestNumber = Math.min(num1,num2)
for (let i = smallestNumber; i >= 0; i--) {
if (num1 % i == 0 && num2 % i == 0) {
console.log(i);
break;
}
}
}
Може и да бъде направено с алгоритъм на Евклид https://bg.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D1%8A%D0%BC_%D0%BD%D0%B0_%D0%95%D0%B2%D0%BA%D0%BB%D0%B8%D0%B4
В статията има пример с рекурсия. Ето как изглежда с решение на един ред:
gcd = (num1, num2) => !num2 ? num1 : gcd(num2, num1 % num2)
console.log(gcd(15, 5))
Благодаря.