Parfois, lors de l'écriture d'un programme, vous devez utiliser un nombre premier pour une raison ou une autre (par exemple, la cryptographie). Je suppose que parfois, vous devez également utiliser un numéro composite. Parfois, au moins ici sur PPCG, votre programme doit être capable de gérer des changements arbitraires. Et dans des circonstances convenablement conçues pour poser une question intéressante sur le PPCG, peut-être même les chiffres que vous utilisez doivent résister à la corruption
Définitions
Un nombre composé est un entier ≥ 4 qui n'est pas premier, c'est-à-dire qu'il est le produit de deux entiers plus petits supérieurs à 1. Un nombre composite résistant au bitflip est défini comme suit: c'est un entier positif composite pour lequel, si vous l'écrivez en binaire dans le nombre minimum de bits possible, vous pouvez changer un ou deux bits du nombre, et le nombre est toujours composite.
Exemple
Par exemple, considérons le nombre 84. En binaire, c'est 1010100
. Voici tous les nombres qui ne diffèrent pas de plus 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
La première colonne est le nombre en binaire; la deuxième colonne est le nombre en décimal. Comme l'indique la troisième colonne, tous ces chiffres sont composites. En tant que tel, 84 est un nombre composite résistant au bitflip.
La tâche
Vous devez écrire l'un des trois programmes ou fonctions suivants, selon celui qui convient le mieux à votre langue:
- Un programme ou une fonction qui prend en entrée un entier non négatif n et génère les n premiers nombres composites résistants au flip bit.
- Un programme ou une fonction qui prend un entier non négatif n en entrée, et sort tous les nombres composites résistants au bitflip inférieurs à n (ou si vous préférez, inférieurs ou égaux à n , c'est-à-dire que vous pouvez choisir si n est inclus dans la sortie si bitflip -résistant).
- Un programme ou une fonction qui ne prend aucune entrée et génère tous les nombres composites résistants au bitflip. (Cela doit utiliser un mécanisme de sortie capable de produire une sortie pendant que le programme est en cours d'exécution, comme l'impression sur stdout, une liste paresseuse ou un générateur; vous ne pouvez pas simplement calculer la liste entière puis l'imprimer.)
Cas de test
Voici les premiers nombres composites résistants au bitflip:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Clarifications
- Ce ne sont que les chiffres que vous produisez qui doivent être résistants aux bitflips. Il ne s'agit pas de rendre le programme qui les trouve résistants aux bitflips; utilisez les numéros que vous aimez dans le programme lui-même.
- Les nombres que vous sortez ne doivent pas nécessairement résister à un bitflip dans les "zéros de tête"; imaginez que les nombres seront stockés dans le nombre minimum possible de bits, et seuls ces bits doivent être à l'abri du retournement. Cependant, les 1 bits initiaux des nombres que vous sortez doivent être à l'abri des bitflips.
- Utilisez n'importe quel algorithme que vous aimez qui produit le bon résultat; vous n'êtes pas marqué sur l'efficacité ici.
- Si vous pouvez prouver qu'il existe un nombre fini de nombres composites résistants au bitflip, alors a) les restrictions sur le format de sortie sont levées, et b) le codage en dur de la liste sera autorisé (bien que probablement plus verbeux que le simple calcul). Cette règle est surtout juste pour être complet; Je ne m'attends pas à ce que ce soit pertinent.
Condition de victoire
C'est du code-golf , donc comme d'habitude, plus c'est court, mieux c'est. Toujours comme d'habitude, la longueur du programme sera mesurée en octets.
n
si len
bitflip est résistant? (c.-à-d. le rendre "inférieur ou égal à n"?)