Definições
Uma bijeção de um conjunto
S
para um conjuntoT
é uma função deS
paraT
que um elemento emT
seja mapeado por exatamente um elemento emS
.Uma joia dentro de um conjunto
S
é uma joia deS
paraS
.Os números naturais são os números inteiros maiores ou iguais a
0
.Um subconjunto de um conjunto
S
é um conjunto de forma que todos os elementos do conjunto também estejamS
.Um subconjunto adequado de um conjunto
S
é um conjunto cujo subconjuntoS
não é igual aS
.
Tarefa
Escreva um programa / função que aceite um número natural como entrada e emita um número natural. Deve ser uma bijeção, e a imagem dos números primos sob o programa / função {f(p) : p ∈ ℙ}
, deve ser um subconjunto apropriado de ℙ
, onde ℙ
estão os números primos.
Pontuação
Isso é código-golfe . A resposta mais curta em bytes vence. Aplicam-se brechas padrão .
Respostas:
Mathematica,
5448 bytesDefine a seguinte bijeção:
A idéia básica é mapear cada prime para o próximo, para garantir que eles sejam mapeados para um subconjunto adequado. Isso resulta em uma "lacuna" em 2 . Para preencher essa lacuna, queremos mapear 4 a 2 e depois o número composto para o número composto anterior, para "aumentar" a diferença. Como 2 e 3 são os únicos dois números primos adjacentes, podemos expressar ambos os mapeamentos como " n-1 ou, se for um primo, então n-2 ". Finalmente, esse mapeamento acaba enviando 1 para 0 e enviamos 0 de volta para 1 , assumindo o valor absoluto de n-1 .
fonte
0
?MATL , 21 bytes
Agradecimentos a Emigna por detectar um erro, agora corrigido
Experimente online!
Isso implementa a seguinte bijeção. Escreva os primos seguidos e os não primos abaixo:
Em seguida, a saída é obtida seguindo a seta da entrada:
Código explicado
fonte
Gelatina , 14 bytes
Experimente online!
Usa o algoritmo de Luis.
fonte
JavaScript (ES6),
827775 bytesImplementa a mesma lógica da resposta de Luis Mendo .
Formatado e comentado
Demo
Mostrar snippet de código
fonte
Gelatina , 12 bytes
Experimente online!
Como funciona
fonte