Às vezes, ao escrever um programa, você precisa usar um número primo por algum motivo ou outro (por exemplo, criptografia). Suponho que, às vezes, você também precise usar um número composto. Às vezes, pelo menos aqui no PPCG, seu programa precisa ser capaz de lidar com alterações arbitrárias. E em circunstâncias convenientemente planejadas para fazer uma pergunta interessante sobre o PPCG, talvez até os números que você está usando tenham que ser resistentes à corrupção ...
Definições
Um número composto é um número inteiro ≥ 4 que não é primo, ou seja, é o produto de dois inteiros menores maiores que 1. Um número composto resistente a bitflip é definido da seguinte maneira: é um número inteiro positivo composto para o qual, se você o escrever em binário no número mínimo possível de bits, você pode alterar um ou dois bits do número e o número ainda é composto.
Exemplo
Por exemplo, considere o número 84. Em binário, é isso 1010100
. Aqui estão todos os números que diferem em não mais de 2 bits:
0000100 4 2 × 2 0010000 16 4 × 4 0010100 20 4 × 5 0010101 21 3 × 7 0010110 22 2 × 11 0011100 28 4 × 7 0110100 52 4 × 13 1000000 64 8 × 8 1000100 68 4 × 17 1000101 69 3 × 23 1000110 70 7 × 10 1001100 76 4 × 19 1010000 80 8 × 10 1010001 81 9 × 9 1010010 82 2 × 41 1010100 84 7 × 12 1010101 85 5 × 17 1010110 86 2 × 43 1010111 87 3 × 29 1011000 88 8 × 11 1011100 92 4 × 23 1011101 93 3 × 31 1011110 94 2 × 47 1100100 100 10 × 10 1110000 112 8 × 14 1110100 116 4 × 29 1110101 117 9 × 13 1110110 118 2 × 59 1111100 124 4 × 31
A primeira coluna é o número em binário; a segunda coluna é o número em decimal. Como a terceira coluna indica, todos esses números são compostos. Como tal, 84 é um número composto resistente a bitflip.
A tarefa
Você deve escrever um dos três programas ou funções a seguir, o que fizer mais sentido para o seu idioma:
- Um programa ou função que recebe um número inteiro não negativo n como entrada e gera os primeiros n números compostos resistentes a bitflip.
- Um programa ou função que usa um número inteiro não negativo n como entrada e gera todos os números compostos resistentes a bitflip menores que n (ou se preferir, menores ou iguais a n , ou seja, você pode escolher se n está incluído na saída se bitflip -resistente).
- Um programa ou função que não recebe entrada e gera todos os números compostos resistentes a bitflip. (Isso deve usar um mecanismo de saída capaz de produzir saída enquanto o programa ainda está em execução, como imprimir em stdout, uma lista lenta ou um gerador; você não pode apenas calcular a lista inteira e imprimi-la.)
Casos de teste
Aqui estão os primeiros números compostos resistentes a bitflip:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Esclarecimentos
- São apenas os números que você produz que precisam ser resistentes aos bitflips. Esta não é uma tarefa para tornar o programa resistente a bitflips; use os números do programa que você gosta.
- Os números que você produz não precisam ser resistentes a um bitflip nos "zeros iniciais"; imagine que os números serão armazenados no número mínimo possível de bits e apenas esses bits deverão ser imunes a inversão. No entanto, os 1 bits iniciais nos números que você produz precisam estar imunes aos bitflips.
- Use qualquer algoritmo que desejar que produz o resultado certo; você não está sendo marcado em eficiência aqui.
- Se você puder provar que existem muitos números compostos resistentes a bitflip, a) as restrições no formato de saída são levantadas eb) a codificação codificada da lista será permitida (embora provavelmente seja mais detalhada do que apenas calculá-la). Esta regra é principalmente apenas para integridade; Não espero que seja relevante.
Condição de vitória
Isso é código-golfe , então, como de costume, quanto menor, melhor. Também como de costume, o comprimento do programa será medido em bytes.
n
sen
for resistente a bitflip? (ou seja, torná-lo "menor ou igual a n"?)