Наименьшее общее кратное из набора положительных целых чисел A
является наименьшим положительным целым числом, B
таким образом, что для каждого k
в A
существует положительное целое число, n
такое что k*n = B
.
Учитывая как минимум два натуральных числа в качестве входных данных, выведите их наименьшее общее кратное.
правила
- Встроенные функции разрешены, но если ваше решение использует их, рекомендуется включить альтернативное решение, которое не использует встроенные функции GCD / LCM. Тем не менее, альтернативное решение не будет учитываться при подсчете очков, поэтому оно не является обязательным.
- Все входы и выходы будут в пределах исходного представления для вашего языка. Если ваш язык изначально обладает произвольно большими целыми числами, то ваше решение должно работать с произвольно большими входами и выходами.
Контрольные примеры
[7, 2] -> 14
[8, 1] -> 8
[6, 4, 8] -> 24
[8, 2, 1, 10] -> 40
[9, 6, 2, 1, 5] -> 90
[5, 5, 7, 1, 1] -> 35
[4, 13, 8, 8, 11, 1] -> 1144
[7, 2, 2, 11, 11, 8, 5] -> 3080
[1, 6, 10, 3, 4, 10, 7] -> 420
[5, 2, 9, 10, 3, 4, 4, 4, 7] -> 1260
[9, 7, 10, 9, 7, 8, 5, 10, 1] -> 2520
Ответы:
На самом деле,
121 байтПредложения по игре в гольф все еще приветствуются, хотя я не уверен, как улучшить встроенный в LCM. Попробуйте онлайн!
12-байтовая версия без встроенного. Предложения по игре в гольф приветствуются. Попробуйте онлайн!
Ungolfing
источник
JavaScript (ES6), 36 байт
Начиная с
1
первого числа, которое можно разделить на всех.Показать фрагмент кода
источник
some
возвращает истину, если хотя бы один элемент в массиве удовлетворяет условию, верно?05AB1E / 2sable , 2 байта
Попробуйте онлайн! в 05AB1E
или 2sable
источник
Желе , 3 байта
Уменьшает на LCM. Попробуйте онлайн! или проверьте все контрольные примеры .
Альтернативная версия, 6 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Python,
69655250 байт2 байта сохранены благодаря Денису!
Довольно простое рекурсивное решение, вам нужно будет немного увеличить предел рекурсии, чтобы некоторые тестовые примеры работали.
источник
any
берет генератор; вам не нужны скобки.A=lambda l,i=1:all(i%a<1for a in l)or-~A(l,i+1)
сохраняет еще несколько байтов.MATL , 7 байт
Нет встроенного
Попробуйте онлайн!
объяснение
Давайте возьмем входные данные
[8, 2, 1, 10]
в качестве примера.РЕДАКТИРОВАТЬ (9 июня 2017 г.):
YF
в выпуске 20.1.0 были изменены два выхода : нефакторные простые числа и их (нулевые) показатели пропущены. Это не влияет на приведенный выше код, который работает без каких-либо изменений.источник
Юлия (3 байта) [Работа над не встроенным]
Как отметил Деннис, я постоянно забываю, что Джулия автоматически векторизует входные данные.
Пример:
источник
PowerShell v2 +,
7360 байтПринимает ввод
$a
, зацикливается вверх от$i=1
с$i++
, основываясь на условном выражении. Условие($a|?{!($i%$_)}).count
быть-n
ВЗe
каче к$a.count
. Это означает, что цикл заканчивается, когда элементы$a
, являющиеся делителями,$i
равны элементам$a
. Затем$i
на конвейере остается одиночное , и вывод неявный.Тестовые случаи
источник
Mathematica, 3 байта
Использование:
источник
Чеддер, 33 байта
Ничего супер нового.
Ungolfed
В основном это начинается с одного и продолжает увеличиваться, пока не найдет LCM
источник
JavaScript (ES6),
6359 байтРекурсивно находит LCM из последних двух элементов.
источник
a=>a.reduce((l,n)=>l*n/(g=(m,n)=>n?g(n,m%n):m)(l,n))
Дьялог АПЛ, 2 байта
Уменьшает на LCM. Проверьте это на TryAPL .
источник
JavaScript (ES6), 52 байта
Я
reduce
сделал этот ответ столько, сколько мог, но, очевидно, я не собираюсь приближаться к простоте ответа @ Хеди.источник
Java 8,
755912189 байтИспользует евклидов алгоритм и тот факт, что LCM (A, B) = A * B / GCD (A, B)
Код:
Удалить разрывы строк:
источник
n->{...}
я верю, что он станет действительным Java 8.int g(int a,int b){return b<1?a:g(b,a%b);}
. LCM может затем статьint l(int[]a){int l=1;for(int n:a)l=l*n/g(l,n);return l;}
, в общей сложности, 99 байтов.MATL , 3 байта
Это использует встроенную функцию с массивом ввода.
Попробуйте онлайн!
источник
Брахилог , 17 байт
Попробуйте онлайн!
объяснение
источник
Perl 6 , 10 байт
в основном так же, как:
источник
J 11 байт
Существует решение для 3 байтов с использованием встроенного LCM.
объяснение
источник
CJam,
181716 байтов1 байт сохранен благодаря Мартину Эндеру.
Увеличивается, пока не будет найден LCM.
Попробуйте онлайн
источник
Ракетка 13 байт
lcm - встроенная функция в Racket:
Тестирование:
Выход:
источник
R, 36 байт (не встроено)
Принимает вход. Затем проверяет каждое положительное целое число, взяв мод.
источник
cat
последний разi
ec=T
это хорошо для +4, а не +5 дляcat()
.v=scan();while(any((F=F+1)%%v)){};F
сcat()
илиec=T
делая это 40 или 39 байт соответственно. И +1, очень хороший подход.Pyth, 9 байт
Программа, которая принимает ввод списка в STDIN и печатает результат.
Попробуйте онлайн или проверьте все тесты
Как это работает
источник
Haskell, 10 байт
Пример использования:
foldl1 lcm [5,2,9,10,3,4,4,4,7]
->1260
.источник
C #, 50 + 18 = 68 байт
50 байтов для определения метода, +18 байтов для импорта LINQ.
Почти так же, как и многие другие ответы. Отсчитывает рекурсивно, пока не найдет LCM. Я был немного удивлен, что не получил StackOverflowException, поэтому у меня также есть нерекурсивная версия, которая на самом деле всего на 1 байт длиннее.
Ungolfed:
источник
Пип , 10 байт
Использует стратегию «пробуй каждое число, пока не сработает». Попробуйте онлайн!
источник
PHP,
4274 байтапрямо:
петля
$f
от 1 вверх; если$f*$a
разделить$b
без остатка, LCM найден.Я полностью перечитал
at least
... вот код для любого количества параметров:Цикл
$f
от 1 и выше, в то время как внутренний цикл не работает до $ argc.Цикл
$i
от2
до$argc-1
пока$f*$argv[1]
делит$argv[$i]
без остатка.обе петли сломаны: печать
$f*$argument 1
.источник
Пролог (SWI) , 46 байт
Попробуйте онлайн!
Другое решение, 59 байт:
источник
Python 3, 83 байта
источник
Brachylog v2, 8 байт
Попробуйте онлайн!
Забавно, насколько прямо это соответствует определению, данному в задании.
Подозрительно медленное, но значительно более короткое решение:
Brachylog v2, 5 байт
Попробуйте онлайн!
Принимает ввод через выходную переменную и дает вывод через входную переменную. Проходит первые четыре тестовых случая, но я все еще жду пятого ... Обычно я все равно делаю это своим основным решением и просто верю, что оно работает правильно, но я не знаю, почему это не так подтвердил, что 90 является LCM,
9, 6, 2, 1, 5
когда я дал ему 90 минут назад.(Изменить: он подтвердил ответ не позднее, чем через 16 часов, и сгенерировал его вместе с LCM
5, 5, 7, 1, 1
примерно через два дня.)И еще один совершенно другой предикат, который случайно более или менее переводит решение Fatalize Brachylog v1:
Brachylog v2, 10 байт
Попробуйте онлайн!
Это было спасено от решения, которое я принял для этой задачи, прежде чем я понял, что результат не ограничен целым числом.
источник
Pyth -
76 байтНет встроенного
Попробуйте это онлайн здесь .
источник
[4]
или что-то еще с повторным основным фактором.