В последнее время было много первоочередных проблем, связанных с факторизацией, поэтому я подумал, что было бы интересно пойти другим путем.
Данный:
- целое положительное число
n
и - непустой список натуральных чисел
f
написать полную программу или функцию , чтобы найти наименьшее целое число i
такое , что i >= n
и i
является продуктом неотрицательных, целых степеней элементов f
.
Примеры:
Пусть
n = 11, f = [2, 3, 5]
.Первые несколько продуктов:
1 = 2^0 * 3^0 * 5^0 2 = 2^1 * 3^0 * 5^0 3 = 2^0 * 3^1 * 5^0 5 = 2^0 * 3^0 * 5^1 4 = 2^2 * 3^0 * 5^0 6 = 2^1 * 3^1 * 5^0 10 = 2^1 * 3^0 * 5^1 9 = 2^0 * 3^2 * 5^0 15 = 2^0 * 3^1 * 5^1 25 = 2^0 * 3^0 * 5^2 8 = 2^3 * 3^0 * 5^0 12 = 2^2 * 3^1 * 5^0 => smallest greater than (or equal to) 11, so we output it. 20 = 2^2 * 3^0 * 5^1 18 = 2^1 * 3^2 * 5^0 30 = 2^1 * 3^1 * 5^1 50 = 2^1 * 3^0 * 5^2 27 = 2^0 * 3^3 * 5^0 45 = 2^0 * 3^2 * 5^1 75 = 2^0 * 3^1 * 5^2 125 = 2^0 * 3^0 * 5^3
Пусть
n=14, f=[9, 10, 7]
.Опять же, первые несколько продуктов:
1 = 7^0 * 9^0 * 10^0 7 = 7^1 * 9^0 * 10^0 9 = 7^0 * 9^1 * 10^0 10 = 7^0 * 9^0 * 10^1 49 = 7^2 * 9^0 * 10^0 => smallest greater than (or equal to) 14, so we output it. 63 = 7^1 * 9^1 * 10^0 70 = 7^1 * 9^0 * 10^1 81 = 7^0 * 9^2 * 10^0 90 = 7^0 * 9^1 * 10^1 100 = 7^0 * 9^0 * 10^2
Тестовые случаи:
n, f -> output
10, [2, 3, 5] -> 10
17, [3, 7] -> 21
61, [3,5,2,7] -> 63
23, [2] -> 32
23, [3] -> 27
23, [2, 3] -> 24
31, [3] -> 81
93, [2,2,3] -> 96
91, [2,4,6] -> 96
1, [2,3,5,7,11,13,17,19] -> 1
151, [20,9,11] -> 180
11616, [23,32] -> 12167
11616, [23,32,2,3] -> 11664 = 2^4 * 3^6
5050, [3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210] -> 5103 = 3^6 * 7
12532159, [57, 34, 12, 21] -> 14183424 = 12^5 * 57
правила
- Вы можете предположить, что он
f
будет содержать хотя бы один элемент, и что все элементыf
будут больше 1. - Вы можете при желании предположить, что
f
сортируется в порядке убывания / увеличения, если вы хотите (но, пожалуйста, укажите). - Вы можете по желанию взять количество элементов,
f
если хотите. - Вывод в виде строки разрешен.
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах на каждом языке!
- Применяются правила ввода / вывода по умолчанию, а стандартные лазейки запрещены.
- Пояснения приветствуются.
источник
∞
сохраняет3
байты более-Log@0 (doesn't work on TIO, but works fine on desktop Mathematica). Also,
Tr [1 ^ {##}] `на байт корочеLength@{##}
.#2
даже короче чемTr[1^{##}]
. :)Quiet
в свой основной код. Этот ответ выводит слишком много неправильных сообщений. По крайней мере, спросите OP, если он в порядке с этим∞
Проблема , как представляется, ошибка. Я постараюсь это исправить.Python 2 ,
918884 байтаПопробуйте онлайн!
Функция
f
рекурсивно проверяет,n
является ли произведение степеней элементов вl
,g
просто оболочкой для управления итерациейисточник
Python, 55 байт
Попробуйте онлайн!
Бесстыдно скопировал нижний колонтитул Рода для тестирования
источник
Желе , 13 байт
Двоичная ссылка, содержащая список
f
слева и числоn
справа, которое дает число.Попробуйте онлайн! Golfily неэффективно - истечет время ожидания для входов с более высоким
n
и / или более длительнымf
.Как?
Мы знаем, что силы отдельных (строго положительных) факторов никогда не нужно будет превышать
n-1
... поэтому давайте просто проверим все возможные пути!
источник
Сетчатка , 76 байт
Попробуйте онлайн! Ссылка исключает самые медленные тестовые случаи, но все еще немного медленная, поэтому старайтесь не забивать сервер @ Dennis.
источник
Pyth - 10 байт
Не хватает памяти очень быстро.
Попробуйте это онлайн здесь .
Разумный ответ для 16 байтов:
fsm.A}RQ*Md./PTE
источник
Mathematica, 85 байт
вход
источник
{d,s}Min@Select[Flatten[1##&@@(s^#)&/@0~Range~9~Tuples~Tr[1^s]],#>=d&]
U+F4A1
длинное имя\[Function]
.0~Range~9
кажется очень консервативным. Должны лиg[{2,3,5},1001]
действительно пропустить1024
и вернуться1080
? Это не особенно большой вклад.Japt , 10 байт
Проверьте это онлайн!
Не работает в последнем тестовом примере из-за лимита итераций, созданного для того, чтобы не дать интерпретатору работать вечно (хотя здесь это не сильно помогло, так как оно заморозило мой браузер на час ...)
объяснение
источник
Желе , 9 байт
O (2 n • length (f) ) время выполнения и использование памяти делают это теоретическим решением.
Попробуйте онлайн!
источник
Haskell , 46 байтов
Это порт отличного ответа Python от KSab . Спасибо Лайкони за помощь в отладке и игре в гольф этот ответ в чате PPCG Haskell, Of Monads and Men . Предложения по игре в гольф приветствуются! Попробуйте онлайн!
источник
Mathematica, 73 байта
По существу порт Rod «S Python ответа . Определяет два бинарных оператора
±
и·
.n±f
возвращаетTrue
ifn
является продуктом элементовf
иFalse
иным образом.n·f
дает наименьшее целое числоi
. Если кто-то может найти способ устранить тест на делимость, я мог бы сэкономить 10 байтов, используя кодировку ISO 8859-1.объяснение
источник
р , 52 байта
Попробуйте онлайн!
Прошло 3 недели, поэтому я решил опубликовать собственное решение. Это подход грубой силы.
Однако есть встроенная функция:
R , 5 байт
Попробуйте онлайн!
Из R документов:
Однако некоторые тесты выявили ошибку в реализации, как показано выше по ссылке TIO.
nextn(91,c(2,6))
должен вернуть 96, но вместо этого возвращает 128. Это, очевидно, происходит только тогда, когдаfactors
не все относительно взаимно просты. Действительно, код C, лежащий в его основе, показывает, чтоnextn
жадно пытается разделить каждыйfactor
по очереди, пока не1
будет достигнут:Это может быть решено путем ввода данных в порядке убывания.
источник
JavaScript (ES6),
5350 байтСохранено 3 байта благодаря @DanielIndie
Принимает ввод в синтаксис карри
(n)(a)
.Контрольные примеры
Показать фрагмент кода
Как?
источник