Последовательности составных чисел
Вдохновленный этим вопросом
Учитывая положительное целое число n , ваш код должен вывести первые n составных чисел.
Ввод, вывод
Вы можете написать программу или функцию. Ввод осуществляется через STDIN или аргумент функции, а вывод - через STDOUT или возвращаемое значение функции.
Выход может быть List, Array или String.
Примеры
0 ->
1 -> 4
2 -> 4, 6
3 -> 4, 6, 8
13 -> 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22
правила
Как всегда, стандартные лазейки запрещены.
Встроенные модули, которые генерируют простые или составные числа, не допускаются.
Встроенные модули, относящиеся к простым или составным числам, не допускаются.
Ответы:
Pyth - 10 байт
Действительный ответ. Использует теорему Вильсона .
Попробуйте это онлайн здесь .
Старый ответ
Pyth - 6 символов
Использует встроенный для простой факторизации , а не простой проверки.
Попробуйте это онлайн здесь .
источник
Pyth, 11 байт
Создает слишком большой список продуктов всех комбинаций [2, n] и усеченных.
источник
1
или2
.TeX, 382 байта
Потому что ты можешь.
Число в последней строке - это количество составных чисел, которые вы хотите получить.
Это простой тестер делителей.
\d
проверяет , является ли#2
водоразделы#1
.\i
требует\d
всех возможных делителей (то есть <#1
).\l
перечисляет первые#2
числа, для которых\i
возвращается 0.Ungolfed (ну, пол-гольф) версия:
источник
Python, 57
Меньше гольфа:
Идея состоит в том, чтобы сгенерировать набор составных чисел путем умножения всех пар натуральных чисел, кроме 0 и 1. Затем отсортируйте этот набор и возьмите первые
n
элементы. Достаточно взять с собой декартово произведение множества{2, 3, ..., n+2}
, которое мы можем получить, сдвинувrange(n)
вверх на 2.Для игры в гольф это, мы делаем классический гольф трюк хранения двух значений
(a,b)
вrange(n)
качестве одного значенияk
вrange(n*n)
, и извлечь ихa=k/n, b=k%n
.источник
Java 8,
9897 байтРасширено, с шаблоном:
источник
R, 53 байта
Как это устроено
Это также основано на теореме Вильсона, и все, что он делает, это пробегает диапазон
1:n*n
и извлекает составные числа в соответствии с вышеупомянутой теоремой. Я добавил,+3
потому чтоn*n
не достаточно большой диапазон дляn < 3
целых чиселЕдинственная проблема с этим решением состоит в том, что (к сожалению) R теряет точность для достаточно большого факториала, таким образом, это не будет работать должным образом для
n > 19
источник
CJam,
2018 байтовПопробуйте онлайн
Не использует никаких встроенных простых чисел или операторов факторизации. Проверка довольно грубой силы на составные числа.
Здесь используется одно наблюдение: мы можем легко вычислить безопасную верхнюю границу для чисел, которые мы должны проверить. Поскольку каждое второе число больше 4 является составным,
4 + n * 2
это верхняя граница для n-го составного числа.Основываясь на предложении @Dennis, последняя реализация фактически использует
n * 5
верхний предел, который гораздо менее эффективен, но на 2 байта короче.Объяснение:
источник
Javascript ES6, 88 символов
источник
f=
является законным.n=>eval('for(r=[],q=2;r.length-n;/^(..+)\\1+$/.test("-".repeat(++q))&&r.push(q))r')
n&&!r[n-1]
: '| Его длина равнаr.length<n
одному символу короче,r.length!=n
но это должен быть Code Golf, верно? : -]Haskell,
4946 байтовПример использования:
Как это устроено
источник
F #, 78 байт
Разъяснение:
источник
i
дважды. Я не слишком знаком с F #, но вы не могли бы использоватьj
?C ++ 109
Ungolfed
источник
while
наfor
.Юлия, 103 байта
Это использует теорему Вильсона.
Ungolfed:
источник
ECMAScript 6 -
1079184 байтаФункция возвращает массив первых
n
составных чисел.Старые версии
Выход
источник
Haskell , 44 байта
Вдохновленный предыдущим ответом Ними , заменив предикат на 2 байта короче, основанный на
any
бессмысленной лямбде вместо понимания вложенного списка.Попробуйте онлайн!
( спасибо Laikoni за точную ссылку TIO )
Объяснение:
источник