Skip to content

Instantly share code, notes, and snippets.

@MikePeleah
Created November 4, 2018 12:25
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 MikePeleah/a8c7e0ebca4251a2ce2ee049037142fb to your computer and use it in GitHub Desktop.
Save MikePeleah/a8c7e0ebca4251a2ce2ee049037142fb to your computer and use it in GitHub Desktop.
/********************************************************
UniLecs 137. Multiplication of digits
Задача: дано натуральное число N. Необходимо найти наименьшее натуральное число, в ктр произведение его цифр было бы равно N. Если такого числа не существует, вывести -1.
Входные данные: N - натуральное число от 1 до 10^9.
Вывод: наименьшее натуральное число, произведение цифр ктр было бы равно N. -1 - если такого числа нет.
Пример:
N = 11; Answer = -1
N = 12; Answer = 26
N = 14; Answer = 27
********************************************************/
function genmultiple_v2(N){
// Цифры для проверки делимости. Фишка в том, что они расположены в порядке приоритетности, так что делимость на сложные делители проверяется первой
var dig = [9,8,6,4,2,3,5,7]
// Сюда будем складывать разложение
var divs = []
// Тут храним остаток делений
rest = N
// Бежим по всем цифрам
for (var i in dig){
// Дадим цифре шанс!
divp = true
while (divp){
// Если текущий остаток делится на цифру без остатка -- записываем цифру в разложение и даём ещё один шанс
if ((rest % dig[i]) == 0){
divs.push(dig[i])
rest = rest / dig[i]
} else {
// Иначе увы и ах! идём к следующей цифре
divp = false
}
}
}
// Проверяем что у нас осталось? Если 1 -- отлично, иначе либо число простое (11), либо в остатке осталось большее 9 простое или их комбинация (например 66 => 2*3*11)
if (rest>1) {
return -1
}
// Соритируем массив, чтобы большие делители заняли низшие разряды, потом конвертируем массив в
divs.sort()
result = parseInt(divs.join(""))
return result;
}
console.log(genmultiple_v2(11))
console.log(genmultiple_v2(12))
console.log(genmultiple_v2(14))
console.log(genmultiple_v2(66))
console.log(genmultiple_v2(100))
console.log(genmultiple_v2(1000000000))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment