Іноді під час написання програми вам потрібно використовувати просте число з тих чи інших причин (наприклад, криптовалюта). Я припускаю, що іноді потрібно використовувати і складене число. Іноді, принаймні тут, на 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 -резистентний).
- Програма або функція, яка не вводить даних, і виводить всі складені числа, стійкі до бітфліпу. (Для цього потрібно використовувати механізм виводу, здатний виробляти вихід, поки програма ще працює, наприклад, друк у stdout, лінивий список чи генератор; ви не можете просто обчислити весь список, а потім надрукувати його.)
Тестові справи
Ось перші декілька композитних номерів, стійких до бітфліпу:
84, 184, 246, 252, 324, 342, 424, 468, 588, 636, 664, 670, 712, 730, 934, 958
Роз'яснення
- Лише ті цифри, які ви створюєте, повинні бути стійкими до бітфліпів. Це не завдання зробити програму, яка вважає їх стійкими до бітфліпів; використовувати будь-які цифри в самій програмі, які вам подобаються.
- Виведені цифри не повинні бути стійкими до бітфліпта у "провідних нулях"; уявіть, що цифри будуть збережені в мінімально можливій кількості бітів, і лише ті біти повинні бути захищені від гортання. Однак початкові 1 біт на число, яке ви виводите, повинні бути захищені від бітфліпів.
- Використовуйте будь-який вподобаний вам алгоритм, який дає правильний результат; тут вас не відзначають ефективність.
- Якщо ви можете довести, що існує безліч стійких до бітфліп складених номерів, то а) обмеження на вихідний формат зняті, і б) жорстке кодування списку буде дозволено (хоча, ймовірно, більш багатослівне, ніж просто його обчислення). Це правило здебільшого справедливе для повноти; Я не очікую, що це буде актуальним.
Стан перемоги
Це кодовий гольф , так як зазвичай, коротше - краще. Також, як завжди, довжина програми буде вимірюватися в байтах.
n
якщоn
стійкий до бітліпса? (тобто зробити його "меншим або рівним n"?)