Bem, o bibliotecário pegou você trapaceando em seu trabalho usando seu algoritmo de classificação , então agora você está sendo punido. Você recebeu uma ordem para criar algum código para que o bibliotecário possa impressionar o objeto de seu afeto não correspondido, o professor de matemática. Então é isso que significa "Outros deveres como atribuídos" ...
Todo mundo está familiarizado com a sequência numérica natural na base 10, chamada N :
0, 1, 2, 3, 4, 5, 6, ...
A partir disso, podemos gerar a sequência de números primos, vamos chamá-la de P , de modo que todo elemento em P tenha exatamente dois divisores em N , a saber, 1
ele próprio. Esta sequência é:
2, 3, 5, 7, 11, 13, ...
OK, rotina bonita até agora.
O bibliotecário pensou em uma função bacana F (x, y) que pega um número x
de N , com a condição 0 <= x <= 9
e um número y
de N , e insere x
a y
expansão decimal de todas as posições (por exemplo, pré-anexando, inserindo ou anexando x
a y
) e, em seguida, retorna o conjunto classificado de novos números.
Por exemplo, F (6, 127) resultaria em
1267, 1276, 1627, 6127
Isso ainda é meio chato, no entanto. O bibliotecário quer apimentar um pouco mais as coisas, especificando uma nova função z -> {p : p in P and F(z,p) subset of P}
, ordenada ascendente.
Por exemplo, z (7) seria
3, 19, 97, 433, 487, 541, ...
porque 37
e 73
são ambos primos 719
179
e 197
todos são primos, etc.
Observe que z (2) está vazio, porque nenhum primo 2
anexado ainda será primo. Da mesma forma para {0,4,5,6,8}.
Sua tarefa é escrever o código que irá gerar e gerar os primeiros 100 números em sequência z (x) para um dado x .
Entrada
Um único inteiro x tal que 0 <= x <= 9
. A entrada pode ser via argumento de função, STDIN ou equivalente.
Resultado
Uma sequência dos 100 primeiros números, delimitada por sua escolha, para STDOUT ou equivalente, de modo que a sequência satisfaça z (x) conforme descrito acima. E se z (x) estiver vazio, como é o caso de {0,2,4,5,6,8}, as palavras Empty Set
devem ser exibidas.
Restrições
- Isso é código-golfe, já que você precisará transcrever isso em um cartão de índice para que o bibliotecário possa mostrar ao professor de matemática e suas mãos cãibras facilmente.
- Aplicam-se restrições de brecha padrão. O bibliotecário não tolera trapaceiros.
Sequências de referência
x = 1: A069246
x = 3: A215419
x = 7: A215420
x = 9: A215421
Relacionado: Encontre o maior primo frágil / Encontre o menor primo de uma substring / Encontre o maior primo que ainda é um primo após a exclusão do dígito
"
é desnecessária, um trabalho muito agradável.Python 3, 188 bytes
Mal jogado, mas aqui está algo por enquanto. Em vez de verificar
p in P and F(z,p) subset of P
, verificamos quep*f
é um semiprime para cada umf in F(z,p)
. Combine isso com a divisão de teste para teste de primalidade e você obterá umO(scary)
algoritmo.fonte
O(scary)
Perl, 124 bytes
Requer a seguinte opção de linha de comando:
-palMntheory=:all
contada como 16. Entrada retirada de stdin.Usa o módulo do @DanaJ
Math::Prime::Util
para perl (carregado com o pragmantheory
). Obtenha com:is_prime
é determinístico para todos os valores menores que 2 64 , o que é suficiente para nossos propósitos.Uso da amostra
Tempo de execução esperado
x = 1 : 1m 09.2s
x = 3 : 0m 04.2s
x = 7 : 2m 52.5s
x = 9 : 0m 11.5s
fonte
Pyth, 58
Este conjunto de testes calcula apenas os 10 primeiros números porque leva muito tempo para gerar o restante. O bruto força a primalidade e a inserção dos dígitos. Demonstra um desempenho tão ruim que não consegui executá-lo até 100, por isso, diga-me se houver problemas.
fonte