Skip to content

Instantly share code, notes, and snippets.

@Lodo4ka
Created April 10, 2018 18:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Lodo4ka/27d9edb9c521b67788d168288ec5f9df to your computer and use it in GitHub Desktop.
Save Lodo4ka/27d9edb9c521b67788d168288ec5f9df to your computer and use it in GitHub Desktop.
const smallestDivisor = (num) => {
const iter = (acc) => {
// We use 'num / 2' in the condition below, and not 'num'.
// This is a simple optimization: a number cannot be divided
// by a number larger than its half.
if (acc > num / 2) {
return num;
}
if (num % acc === 0) {
return acc;
}
return iter(acc + 1);
};
return iter(2);
// END
}
export default smallestDivisor;
Реализуйте тело функции smallestDivisor, используя итеративный процесс. Эта функция должна находить наименьший делитель заданного числа.
Доп. условия: число, передаваемое в функцию, больше нуля; делитель должен быть больше единицы, за исключением случая, когда аргументом является единица (наименьшим делителем которой является также единица).
Например, наименьший делитель числа 15 это 3.
smallestDivisor(15); // 3
smallestDivisor(17); // 17
Идея алгоритма:
Попробуйте разделить число на 2.
Если число делится без остатка, то это наименьший делитель.
Если нет, то попробуйте следующий делитель.
Если ничего не делит число без остатка, то переданное число является простым, так что его наименьший делитель — оно само (не считая 1)
Подсказка
Вспомните про оператор % (modulus or остаток от деления) из урока 4. Он вычисляет остаток от деления одного операнда на другой. Например, 11%5 это 1, а 10%2 это 0.
Так что если x%y это 0, то y делит x без остатка.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment