Иногда при написании программы вам нужно по какой-либо причине использовать простое число (например, криптографию). Я предполагаю, что иногда вам также нужно использовать составное число. Иногда, по крайней мере, здесь, на PPCG, ваша программа должна иметь дело с произвольными изменениями. И в обстоятельствах, которые удобно создать интересный вопрос PPCG, возможно, даже цифры, которые вы используете, должны быть устойчивы к коррупции ...
Определения
Составное число является целым числом ≥ 4 , что не является простым, то есть это произведение двух меньших чисел больше 1. А bitflip резистентных составное число определяется следующим образом : это составное натуральное число , для которого, если вы пишете в двоичном коде в минимально возможном количестве битов вы можете изменить любой один или два бита из числа, и число все еще является составным.
пример
Например, рассмотрим число 84. В двоичном виде это 1010100
. Вот все числа, которые отличаются не более чем на 2 бита от этого:
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
Первый столбец - это число в двоичном формате; второй столбец - это число в десятичном виде. Как показывает третий столбец, все эти числа являются составными. Таким образом, 84 является устойчивым к битфлипу составным числом.
Задание
Вы должны написать одну из следующих трех программ или функций, в зависимости от того, что лучше всего подходит для вашего языка:
- Программа или функция, которая принимает неотрицательное целое число n в качестве входных данных и выводит первые n составных чисел, устойчивых к биту.
- Программа или функция, которая принимает неотрицательное целое число n в качестве входных данных и выводит все составные числа, устойчивые к битовым сдвигам, меньшие, чем n (или, если вы предпочитаете, меньшие или равные n , т.е. вы можете выбрать, будет ли n включен в выходные данные, если bitflip резистентный).
- Программа или функция, которая не требует ввода и выводит все составные числа, устойчивые к бит-флипу. (При этом должен использоваться механизм вывода, способный генерировать выходные данные во время работы программы, например, печать в стандартный вывод, отложенный список или генератор; вы не можете просто вычислить весь список и затем напечатать его.)
Контрольные примеры
Вот первые несколько составных чисел, устойчивых к бит-флипу:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Разъяснения
- Только числа, которые вы производите, должны быть устойчивы к бит-флипам. Это не задача создания программы, которая считает их устойчивыми к бит-флипам; используйте любые числа в самой программе, которые вам нравятся.
- Числа, которые вы выводите, не должны быть устойчивыми к бит-флипу в «ведущих нулях»; представьте, что числа будут храниться в минимально возможном количестве битов, и только эти биты должны быть защищены от переворачивания. Тем не менее, начальные 1 бита в числах, которые вы выводите, должны быть невосприимчивы к бит-флипам.
- Используйте любой алгоритм, который вам нравится, который дает правильный результат; Вы не отмечены на эффективность здесь.
- Если вы можете доказать, что существует конечное число составных чисел, устойчивых к битовым флипам, то а) ограничения на формат вывода будут сняты, и б) будет разрешено жесткое кодирование списка (хотя, вероятно, более подробное, чем просто его вычисление). Это правило в основном только для полноты; Я не ожидаю, что это будет актуально.
Состояние победы
Это код-гольф , поэтому, как обычно, чем короче, тем лучше. Также, как обычно, длина программы будет измеряться в байтах.
n
лиn
бит-флип-устойчивым? (то есть сделать его "меньше или равно n"?)