A veces, al escribir un programa, debe usar un número primo por alguna razón u otra (por ejemplo, criptografía). Supongo que a veces, también necesitas usar un número compuesto. A veces, al menos aquí en PPCG, su programa tiene que poder manejar cambios arbitrarios. Y en circunstancias convenientemente diseñadas para hacer una pregunta interesante de PPCG, tal vez incluso los números que está usando tienen que ser resistentes a la corrupción ...
Definiciones
Un número compuesto es un número entero ≥ 4 que no es primo, es decir, es el producto de dos números enteros más pequeños mayores que 1. Un número compuesto resistente al bitflip se define de la siguiente manera: es un número entero compuesto positivo para el cual, si lo escribe en binario en el mínimo número posible de bits, puede cambiar uno o dos bits del número, y el número sigue siendo compuesto.
Ejemplo
Por ejemplo, considere el número 84. En binario, eso es 1010100
. Aquí están todos los números que difieren en no más de 2 bits de eso:
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
La primera columna es el número en binario; La segunda columna es el número en decimal. Como indica la tercera columna, todos estos números son compuestos. Como tal, 84 es un número compuesto resistente a bitflip.
La tarea
Debe escribir uno de los siguientes tres programas o funciones, el que tenga más sentido para su idioma:
- Un programa o función que toma un número entero no negativo n como entrada y emite los primeros n números compuestos resistentes a los cambios de bits.
- Un programa o función que toma un número entero no negativo n como entrada, y genera todos los números compuestos resistentes a bitflip menores que n (o si lo prefiere, menor o igual que n , es decir, puede elegir si n está incluido en la salida si bitflip -resistente).
- Un programa o función que no recibe entrada y genera todos los números compuestos resistentes a los cambios de bit (Esto debe usar un mecanismo de salida capaz de producir resultados mientras el programa aún se está ejecutando, como imprimir en stdout, una lista diferida o un generador; no puede calcular la lista completa y luego imprimirla).
Casos de prueba
Aquí están los primeros números compuestos resistentes a bitflip:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Aclaraciones
- Son solo los números que produce los que tienen que ser resistentes a los bitflips. Esta no es una tarea para hacer que el programa los encuentre resistentes a los bitflips; use cualquier número en el programa que le guste.
- Los números que genera no tienen que ser resistentes a un bitflip en los "ceros iniciales"; imagine que los números se almacenarán en el mínimo número posible de bits, y solo esos bits tienen que ser inmunes al volteo. Sin embargo, los 1 bits iniciales en los números que genera tienen que ser inmunes a los cambios de bits.
- Use cualquier algoritmo que le guste que produzca el resultado correcto; No estás siendo marcado en eficiencia aquí.
- Si puede probar que hay muchos números compuestos resistentes a los bitflip, entonces a) se levantan las restricciones en el formato de salida, yb) se permitirá codificar la lista (aunque probablemente sea más detallado que solo calcularlo). Esta regla es principalmente para completar; No espero que sea relevante.
Condición de victoria
Este es el código de golf , así que, como siempre, más corto es mejor También, como de costumbre, la longitud del programa se medirá en bytes.
n
sin
es resistente a los cambios de bits? (es decir, ¿hacerlo "menor o igual que n"?)