Около года назад вас попросили найти простые числа XOR . Это числа, чьи единственные факторы равны 1 и сами при выполнении умножения XOR в базе 2 . Теперь были немного оживлены.
Мы собираемся найти простые числа XOR в базе -2
Преобразование в базу -2
База -2 очень похожа на любую другую базу. Самое левое место - это 1-е место (1 = (-2) 0 ), рядом с ним - -2-е место (-2 = (-2) 1 ), рядом - 4-е место (4 = (-2) ) 2 ) и тд и тп. Большая разница в том, что отрицательные числа могут быть представлены в базе -2 без каких-либо отрицательных знаков.
Вот несколько примеров конверсий:
Decimal | Base -2
-----------------
6 | 11010
-7 | 1001
12 | 11100
-15 | 110001
Добавление XOR в базу -2
Добавление XOR в Base-2 во многом аналогично добавлению XOR в двоичном виде. Вы просто конвертируете число в Base -2 и XOR каждой цифры на месте. (Это то же самое, что и сложение без переноса)
Вот пример, проработанный шаг за шагом:
(Мы будем использовать символ +'
для обозначения добавления базы XOR X)
Начните с базы 10:
6 +' -19
Преобразовать в базу -2:
11010 +' 10111
Добавьте их без ношения:
11010
+' 10111
---------
01101
Преобразуйте ваш результат обратно в базу 10:
-3
Умножение XOR в Base -2
Еще раз умножение XOR в базе -2 почти такое же, как умножение XOR в двоичном виде. Если вы не знакомы с XOR умножения в базе 2 есть отличное объяснение здесь я предлагаю вам взглянуть на это первое.
Умножение XOR в Base-2 - это то же самое, что и длинное умножение в Base-2, за исключением того, что когда дело доходит до последнего шага, вместо сложения всех чисел с традиционным +
, используемым вами, как +'
мы определили выше.
Вот пример, разработанный ниже:
Начать в десятичном формате:
8 *' 7
Преобразовать в базу -2:
11000 *' 11011
Установить длинное деление:
11000
*' 11011
---------
Умножьте первое число на каждое место во втором
11000
*' 11011
------------
11000
11000
0
11000
11000
Сложите все результаты, используя базовое добавление XOR
11000
*' 11011
-------------
11000
11000
0
11000
+' 11000
-------------
101101000
Преобразуйте результат обратно в десятичное число:
280
Соревнование
Ваша задача - проверить, является ли число простым XOR в базе -2. Число - это простое число XOR в базе -2, если единственной парой целых чисел, умножающихся на него в базе, являются 1 и сама. (1 не простое)
Вы возьмете число и выведите логическое значение, правда, если в противном случае вводом является простое число XOR в базе -2.
Решения будут оцениваться в байтах с достижением наименьшего количества байтов в качестве цели.
Контрольные примеры
Ниже приведены все простые числа XOR в базе -2:
-395
-3
-2
3
15
83
Следующие числа не являются простыми числами XOR в базе -2:
-500
-4
0
1
258
280
источник
258
кажется равным-2 *' -129 = 10 *' 10000011
Ответы:
Mathematica,
156101 байтКак указано здесь , это работает, потому что умножение XOR по существу является умножением в кольце многочленов F_2.
объяснение
Начните с
{input}
. Повторно заменяйте числоa
(кроме 0 и 1) наa
mod 2 и добавляйте -floor (a
/ 2), пока оно не изменится. Это вычисляет вход в базу -2.Создайте полином, используя цифры базового числа -2, используя
x
в качестве переменной. например{1, 1, 0}
->x^2 + x
Проверьте, является ли полученный многочлен неприводимым, с модулем 2.
Старая версия (156 байт)
Список простых чисел
Вот список базовых -2 простых чисел XOR между -1000 и 1000 (pastebin)
источник