Sequências numéricas compostas
Inspirado por esta pergunta
Dado um número inteiro positivo n , seu código deve gerar os primeiros n números compostos.
Entrada / Saída
Você pode escrever um programa ou uma função. A entrada é através de STDIN ou argumento de função e a saída é para STDOUT ou valor de retorno da função.
A saída pode ser uma lista, matriz ou sequência.
Exemplos
0 ->
1 -> 4
2 -> 4, 6
3 -> 4, 6, 8
13 -> 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22
Regras
Como sempre , brechas padrão não são permitidas.
Built-ins que geram números primos ou compostos não são permitidos.
Construções relacionadas a números primos ou compostos não são permitidas.
Respostas:
Pitão - 10 bytes
Uma resposta válida. Usa o Teorema de Wilson .
Experimente online aqui .
Resposta antiga
Pitão - 6 caracteres
Usa builtin para fatoração primária , não para verificação primária.
Experimente online aqui .
fonte
Pitão, 11 bytes
Gera lista excessivamente grande de produtos de todas as combinações de [2, n] e truncados.
fonte
1
ou2
.TeX, 382 bytes
Porque você pode.
O número na última linha é o número de números compostos que você deseja ter.
Este é um testador simples de divisor.
\d
verifica se#2
divide#1
.\i
solicita\d
todos os divisores possíveis (ou seja, <#1
).\l
lista os primeiros#2
números para os quais\i
retorna 0.Versão ungolfed (bem, half-golfed):
fonte
Python, 57
Menos golfe:
A idéia é gerar o conjunto de números compostos multiplicando todos os pares de números naturais, exceto 0 e 1. Em seguida, classifique esse conjunto e pegue os primeiros
n
elementos. Basta levar{2, 3, ..., n+2}
consigo o produto cartesiano do conjunto , que podemos obter mudandorange(n)
para 2.Para golf isso, fazer um truque de golfe clássico de armazenar dois valores
(a,b)
emrange(n)
como um único valork
norange(n*n)
, e extraí-los comoa=k/n, b=k%n
.fonte
Java 8,
9897 bytesExpandido, com clichê:
fonte
R, 53 bytes
Como funciona
Isso também é baseado no teorema de Wilson e tudo o que faz é percorrer um intervalo
1:n*n
e extrair os números compostos de acordo com o teorema mencionado acima. Eu adicionei+3
porquen*n
não é grande o suficiente paran < 3
números inteirosO único problema com esta solução é que (infelizmente) R perde precisão para um fatorial grande o suficiente, portanto, isso não funcionará corretamente para
n > 19
fonte
CJam,
2018 bytesExperimente online
Não usa nenhum operador principal ou de fatoração incorporado. Verificação de força bruta para números sendo compostos.
Uma observação usada aqui é que podemos calcular facilmente um limite superior seguro para os números que temos que testar. Como todo segundo número maior que 4 é composto,
4 + n * 2
é um limite superior para o n-ésimo número composto.Com base em uma sugestão do @Dennis, a implementação mais recente realmente usa
n * 5
como limite superior, que é muito menos eficiente, mas 2 bytes mais curto.Explicação:
fonte
Javascript ES6, 88 caracteres
fonte
f=
é legal.n=>eval('for(r=[],q=2;r.length-n;/^(..+)\\1+$/.test("-".repeat(++q))&&r.push(q))r')
n&&!r[n-1]
: '| Tem o mesmo comprimento quer.length<n
- um caractere menor quer.length!=n
-, mas é suposto ser o Code Golf, certo? : -]Haskell,
4946 bytesExemplo de uso:
Como funciona
fonte
F #, 78 bytes
Explicado:
fonte
i
duas vezes. Eu não estou muito familiarizado com o F #, mas você não poderia usarj
?C ++ 109
Ungolfed
fonte
while
porfor
.Julia, 103 bytes
Isso usa o teorema de Wilson.
Ungolfed:
fonte
ECMAScript 6 -
1079184 bytesA função retorna uma matriz dos primeiros
n
números compostos.Versões antigas
Resultado
fonte
Haskell , 44 bytes
Fortemente inspirado pela resposta anterior de Nimi , substituindo o predicado por um byte mais curto de 2 bytes, com base em
any
uma lambda sem pontos, em vez de uma compreensão de lista aninhada.Experimente online!
( obrigado a Laikoni pelo link preciso do TIO)
Explicação:
fonte