(Случайно вдохновленный /mathpro//q/339890 )
(Связанный: 1 , 2 )
Учитывая входной список различных простых чисел (например, [2, 5, 7]
) и целое число n
, выведите все натуральные числа, строго меньшие, чем те, n
которые содержат только эти простые числа в качестве делителей. Для ввода [2, 5, 7]
и n=15
это означает вывод [2, 4, 5, 7, 8, 10, 14]
.
Дальнейшие примеры
[list] n | output
[2, 5, 7] 15 | [2, 4, 5, 7, 8, 10, 14]
[2, 5, 7] 14 | [2, 4, 5, 7, 8, 10]
[2] 3 | [2]
[2] 9 | [2, 4, 8]
[103, 101, 97] 10000 | [97, 101, 103, 9409, 9797, 9991]
[97, 101, 103] 104 | [97, 101, 103]
Правила и разъяснения
- Входной список гарантированно не пустой, но может быть только одним элементом
- Вы можете предположить, что входной список предварительно отсортирован любым удобным способом
n
всегда будет больше, чем самый большой элемент в списке ввода- Так как, например,
2**0 = 1
вы можете при желании включить1
в свой список вывода - Ввод и вывод может быть дан любым удобным способом
- Вы можете распечатать результат в STDOUT или вернуть его как результат функции
- Либо полная программа или функция приемлемы
- Если применимо, вы можете предположить, что целые числа ввода / вывода вписываются в родной
int
диапазон вашего языка - Стандартные лазейки запрещены
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах)
1
вывод.[2, 3, 7]
вы не можете использовать5
.Ответы:
Stax , 6 байт
Запустите и отладьте его на staxlang.xyz!
Распаковывается (7 байт) и пояснение:
источник
05AB1E , 6 байтов
Принимает целое число в качестве первого ввода, список как второй. Включает дополнительный
1
в выходной.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Два 6 байт альтернативы , предоставляемые @Grimy :
Попробуйте онлайн.
Этот очень медленный (
[2,5,7], 15
тестовый тайм-аут уже истек), но менее похож на два других подхода:В отличие от двух других программ, приведенных выше, в качестве первого ввода принимается список, а во втором - целое число.
1
Тем не менее, он включает в себя и дополнительный вывод.Попробуйте онлайн.
источник
sиPѦʒ›
. Я думал, что у меня есть 6, но, кажется, нет никакого способа использоватьs
/I
/¹
4747561509943000000000000000
. ;)GNfåP–
JavaScript (ES6),
64 ... 5250 байтПринимает входной сигнал , как ,
(n)(primes)
где штрихи представляют собой набор. Выходы путем изменения набора.Попробуйте онлайн!
комментарии
источник
Python 3 ,
6865 байтПопробуйте онлайн!
-3 байта благодаря @xnor
Функция принимает простую последовательность и целое число n в качестве входных данных. Вывод представляет собой список, который включает 1.
Ungolfed:
Попробуйте онлайн!
источник
c*s<n*s
. Изменить:n//c*s
короче.Haskell , 51 байт
x
p
mapM((<$>[0..n]).(^))p
product
n
p
Попробуйте онлайн!
источник
Haskell , 39 байт
Попробуйте онлайн!
Проверяет,
k
делится ли делится только на простые числаl
, проверяя, делится ли произведениеl
на высокую степеньk
.источник
Python 2 , 65 байт
Попробуйте онлайн!
Проверяет,
k
делится ли делится только на простые числаl
, проверяя, делится ли произведениеl
на высокую степеньk
.Если
l
можно рассматривать как список строкeval("*".join(l))
сохраняет 3 байт надreduce(int.__mul__,l)
и может быть использован в Python 3 , который испытывает недостатокreduce
.Python 3 , 64 байта
Попробуйте онлайн!
Функция печатает в обратном порядке и завершается с ошибкой.
Приведенное ниже рекурсивное решение было бы короче, если бы оно
n
было включено в список. Я также пытался рекурсивно вычислять продуктl
, но это было дольше.62 байта (нерабочий)
Попробуйте онлайн!
источник
Gaia , 10 байт
Попробуйте онлайн!
Раньше я никогда не использовал
‡
монаду, это очень полезно для работы со стеком.источник
J , 24 байта
Попробуйте онлайн!
источник
Желе , 7 байт
Попробуйте онлайн!
Диадическая ссылка, принимающая исключительную верхнюю границу в качестве левого аргумента и список простых чисел в качестве правого. Возвращает список, который включает 1, а также числа, состоящие только из предоставленных простых чисел.
Альтернатива 7 будет
ṖÆfḟ¥Ðḟ
источник
Python 2 , 98 байт
Попробуйте онлайн!
источник
Japt
-f
,118 байтПопытайся
источник
Japt
-f
, 7 байтПопытайся
источник
1
в вывод, что это не должно. Я тоже начал сk e!øV
моего решения, но мне понадобилось 2 дополнительных байта для фильтрации0
&1
.Since, e.g., 2**0 = 1, you can optionally include 1 in your output list
Рубин
-rprime
, 61 байтПопробуйте онлайн!
источник
Сетчатка 0.8.2 , 64 байта
Попробуйте онлайн!Список включает меньшие тестовые случаи (
10000
время ожидания из-за всех длинных строк). Принимает входные данные в порядкеn f1 f2 f3...
(факторы не должны быть простыми, но они должны быть взаимно простыми). Выход включает в себя1
. Объяснение:Преобразовать в одинарный.
Создайте список от 0 до
n-1
, как десятичный, так и унарный.Повторно делите одинарное на любые доступные факторы.
Выведите десятичные числа, до которых унарное число было уменьшено
1
.источник
Pyth , 10 байт
Попробуйте онлайн!
Принимает вход как
[[primes...], n]
источник
Perl 6 , 27 байт
Попробуйте онлайн!
Порт решения xnor's Haskell. Также выходы 1.
источник
Древесный уголь ,
2220 байтПопробуйте онлайн! Ссылка на подробную версию кода. Слишком медленно для большого тестового случая. Объяснение:
Предыдущий более быстрый 22-байтовый ответ:
Попробуйте онлайн! Ссылка на подробную версию кода. Выход включает в себя
1
. Объяснение:Нажмите
1
на предопределенный пустой список.Цикл по списку, включая любые элементы, добавленные к нему во время цикла.
Умножьте текущий элемент на каждое простое число и переберите продукты.
Проверьте, является ли продукт новым значением.
Если это так, то нажмите его в список.
Распечатайте список.
источник
C (лязг) , 115 байт
Попробуйте онлайн!
Сито из раствора на основе эратосфена.
(Включает 1 в выходной)
Благодаря предложению @ceilingcat: printf (x [i] + "\ 0% d", i ++) вместо x [i] && printf ("% d", i), i ++, я полагаю, он сдвигает указатель литерала, но не не нашел никакой документации, если кто-то может дать мне некоторое понимание, это будет приветствоваться.
источник
x[i]==1
затем строка"%d "
. Еслиx[i]==0
затем строка""
. Строки C завершаются нулем, поэтому явный нулевой символ завершает строку. Этот хак также злоупотребляет некоторым неопределенным поведением в clang, связанным сi++
.