- 23, Oct 2024
- #1
Учитывая полупервичный Н, найдите наименьшее положительное целое число м такое, что двоичное представление одного из двух факторов Н можно найти в двоичном представлении Н*м.
Пример
Рассмотрим полупростые Н = 9799.
Мы пробуем разные значения м, начиная с 1:
N | m | N * m | N * m in binary | Factor -----------+------+---------------+----------------------------------------------+------- 9 | 3 | 27 | [11]011 | 3 15 | 1 | 15 | [11]11 | 3 49 | 5 | 245 | [111]10101 | 7 91 | 1 | 91 | 10[1101]1 | 13 961 | 17 | 16337 | [11111]111010001 | 31 1829 | 5 | 9145 | 1000[111011]1001 | 59 9799 | 11 | 107789 | 1[101001]0100001101 | 41 19951 | 41 | 817991 | 1[1000111]101101000111 | 71 120797 | 27 | 3261519 | 11000[1110001]0001001111 | 113 1720861 | 121 | 208224181 | 11000110100[100111111101]10101 | 2557 444309323 | 743 | 330121826989 | 100110011011100110010[1101010010101011]01 | 54443 840000701 | 4515 | 3792603165015 | 11011100110000[1000110000111011]000101010111 | 35899 1468255967 | 55 | 80754078185 | 1001011001101010100010[1110001111]01001 | 911
На этом мы останавливаемся, поскольку двоичное представление последнего произведения содержит 101001
which is the binary representation of 41, один из двух факторов 9799 (другой из них 239).
Таким образом, ответ будет 11.
Правила и примечания
- Попытка даже значений м бессмысленно. Они были показаны в приведенном выше примере для полноты картины.
- Ваша программа должна поддерживать любые Н для чего Н*м находится в пределах вычислительных возможностей вашего языка.
- Вам разрешено факторизовать Н заранее, вместо того, чтобы пробовать каждую возможную подстроку двоичного представления Н*м чтобы увидеть, окажется ли это фактором Н.
- Как проверено Митчелл Спектором, м всегда существует.
- Это код-гольф, поэтому побеждает самый короткий ответ в байтах. Стандартные лазейки запрещены.
Тестовые случаи
Первый столбец — это входные данные. Второй столбец — ожидаемый результат.
m | N * m | N * m in binary
---+--------+------------------
1 | 9799 | 10011001000111
2 | 19598 | 100110010001110
3 | 29397 | 111001011010101
4 | 39196 | 1001100100011100
5 | 48995 | 1011111101100011
6 | 58794 | 1110010110101010
7 | 68593 | 10000101111110001
8 | 78392 | 10011001000111000
9 | 88191 | 10101100001111111
10 | 97990 | 10111111011000110
11 | 107789 | 11010010100001101
#код-гольф #простые числа #двоичный код