Secuencias de números compuestos
Inspirado por esta pregunta
Dado un entero positivo n , su código debe generar los primeros n números compuestos.
De entrada y salida
Puedes escribir un programa o una función. La entrada es a través de STDIN o argumento de función y la salida es a STDOUT, o valor de retorno de función.
La salida puede ser una lista, una matriz o una cadena.
Ejemplos
0 ->
1 -> 4
2 -> 4, 6
3 -> 4, 6, 8
13 -> 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22
Reglas
Como siempre, las lagunas estándar no están permitidas.
No se permiten los elementos integrados que generan números primos o compuestos.
Las incorporaciones relacionadas con números primos o compuestos no están permitidas.
Respuestas:
Pyth - 10 bytes
Una respuesta valida Utiliza el teorema de Wilson .
Pruébelo en línea aquí .
Vieja respuesta
Pyth - 6 caracteres
Utiliza incorporado para la factorización prima , no para la verificación principal.
Pruébelo en línea aquí .
fuente
Pyth, 11 bytes
Genera una lista demasiado grande de productos de todas las combinaciones de [2, n] y trunca.
fuente
1
o2
.TeX, 382 bytes
Porque tú puedes.
El número en la última línea es el número de números compuestos que desea tener.
Este es un simple probador de divisores.
\d
comprueba si se#2
divide#1
.\i
requiere\d
todos los divisores posibles (es decir, <#1
).\l
enumera los primeros#2
números para los cuales\i
devuelve 0.Versión sin golf (bueno, medio golf):
fuente
Python, 57
Menos golfizado:
La idea es generar el conjunto de números compuestos multiplicando todos los pares de números naturales excepto 0 y 1. Luego, clasifique este conjunto y tome los primeros
n
elementos. Es suficiente tomar el producto cartesiano del conjunto{2, 3, ..., n+2}
consigo mismo, que podemos obtener cambiandorange(n)
a 2.Al golf esto, hacer un truco clásico de golf de almacenar dos valores
(a,b)
enrange(n)
un solo valork
enrange(n*n)
, y extraer de ellos comoa=k/n, b=k%n
.fuente
Java 8,
9897 bytesAmpliado, con repetitivo:
fuente
R, 53 bytes
Cómo funciona
Esto también se basa en el teorema de Wilson y todo lo que hace es ejecutar un rango
1:n*n
y extraer los números compuestos de acuerdo con el teorema mencionado anteriormente. He agregado+3
porquen*n
no es un rango lo suficientemente grande paran < 3
enterosEl único problema con esta solución es que (lamentablemente) R pierde precisión para un factorial lo suficientemente grande, por lo tanto, esto no funcionará correctamente para
n > 19
fuente
CJam,
2018 bytesPruébalo en línea
No utiliza ningún operador de primo o factorización incorporado. Comprobación de fuerza bruta para los números compuestos.
Una observación que se usa aquí es que podemos calcular fácilmente un límite superior seguro para los números que tenemos que probar. Como cada segundo número mayor que 4 es compuesto,
4 + n * 2
es un límite superior para el enésimo número compuesto.Según una sugerencia de @Dennis, la última implementación en realidad usa
n * 5
como límite superior, que es mucho menos eficiente, pero 2 bytes más corto.Explicación:
fuente
Javascript ES6, 88 caracteres
fuente
f=
es legal.n=>eval('for(r=[],q=2;r.length-n;/^(..+)\\1+$/.test("-".repeat(++q))&&r.push(q))r')
n&&!r[n-1]
: '| Tiene la misma longitud quer.length<n
, un carácter más corto quer.length!=n
, pero se supone que es Code Golf, ¿verdad? : -]Haskell,
4946 bytesEjemplo de uso:
Cómo funciona
fuente
F #, 78 bytes
Explicado:
fuente
i
dos veces. No estoy muy familiarizado con F #, pero ¿no podrías usarloj
?C ++ 109
Sin golf
fuente
while
porfor
.Julia, 103 bytes
Esto usa el teorema de Wilson.
Sin golf:
fuente
ECMAScript 6 -
1079184 bytesLa función devuelve una matriz de los primeros
n
números compuestos.versiones antiguas
Salida
fuente
Haskell , 44 bytes
Muy inspirado por la respuesta anterior de Nimi , reemplazando el predicado por uno de 2 bytes más corto basado en
any
una lambda sin puntos en lugar de una comprensión de lista anidada.Pruébalo en línea!
( gracias a Laikoni por el enlace TIO preciso)
Explicación:
fuente