A volte, quando si scrive un programma, è necessario utilizzare un numero primo per qualche motivo (ad esempio crittografia). Presumo che a volte sia necessario utilizzare anche un numero composto. A volte, almeno qui su PPCG, il tuo programma deve essere in grado di gestire modifiche arbitrarie. E in circostanze opportunamente inventate per fare un'interessante domanda PPCG, forse anche i numeri che stai usando devono essere resistenti alla corruzione ...
definizioni
Un numero composto è un numero intero ≥ 4 che non è un numero primo, ovvero è il prodotto di due numeri interi più piccoli maggiori di 1. Un numero composito resistente al ribaltamento è definito come segue: è un numero intero positivo composito per il quale, se lo scrivi in binario nel numero minimo possibile di bit, è possibile modificare uno o due bit dal numero e il numero è ancora composto.
Esempio
Ad esempio, considera il numero 84. In binario, questo è 1010100
. Ecco tutti i numeri che differiscono di non più di 2 bit da quello:
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 prima colonna è il numero in binario; la seconda colonna è il numero in decimale. Come indica la terza colonna, tutti questi numeri sono compositi. In quanto tale, 84 è un numero composito resistente al ribaltamento dei bit.
L'obiettivo
Devi scrivere uno dei seguenti tre programmi o funzioni, a seconda di quale cosa abbia più senso per la tua lingua:
- Un programma o una funzione che accetta un numero intero non negativo n come input e genera i primi n numeri compositi resistenti al bitflip.
- Un programma o una funzione che accetta un numero intero non negativo n come input e genera tutti i numeri compositi resistenti al bitflip inferiori a n (o se si preferisce, minore o uguale a n , ovvero è possibile scegliere se n è incluso nell'output se bitflip -resistente).
- Un programma o una funzione che non accetta input e genera tutti i numeri compositi resistenti al bitflip. (Questo deve usare un meccanismo di output in grado di produrre output mentre il programma è ancora in esecuzione, come la stampa su stdout, un elenco pigro o un generatore; non puoi semplicemente calcolare l'intero elenco e quindi stamparlo.)
Casi test
Ecco i primi numeri compositi resistenti ai bitflip:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
chiarimenti
- Sono solo i numeri che produci che devono essere resistenti alle cadute di bit. Questo non è un compito per rendere il programma che li trova resistenti alle cadute di bit; usa qualsiasi numero nel programma stesso che ti piace.
- I numeri che emetti non devono essere resistenti a un bitflip negli "zero iniziali"; immagina che i numeri saranno memorizzati nel numero minimo possibile di bit e che solo quei bit devono essere immuni al ribaltamento. Tuttavia, i 1 bit iniziali sui numeri emessi devono essere immuni ai bitflip.
- Utilizzare qualsiasi algoritmo che ti piace che produce il risultato giusto; qui non sei segnato sull'efficienza.
- Se puoi provare che ci sono molti numeri compositi resistenti al bitflip, allora a) le restrizioni sul formato di output vengono aumentate e b) la codifica dura dell'elenco sarà consentita (anche se probabilmente più prolissa del semplice calcolo). Questa regola è principalmente solo per completezza; Non mi aspetto che sia rilevante.
Condizione di vittoria
Questo è code-golf , quindi come al solito, più corto è meglio. Inoltre, come al solito, la lunghezza del programma verrà misurata in byte.
n
sen
è resistente a bitflip? (ovvero renderlo "minore o uguale a n"?)