Квантовые коты

Если $$$N$$$ — нечётное число, то просто запишем в ячейку $$$i,j$$$ число $$$((i + j - 2) \cdot \text{inv2modN}) \mod N + 1$$$, где $$$\text{inv2modN} = (N + 1)/2$$$ — число, обратное к 2 по умножению по модулю $$$N$$$, то есть $$$(2 \cdot \text{inv2modN}) \mod N = 1$$$.

Заполнение $$$(i + j - 2) \mod N + 1$$$ даст корректную расстановку без учёта ограничения на диагональ, так как сложение по модулю $$$N$$$ образует группу. Умножение на $$$\text{inv2modN}$$$ сделает корректной диагональ, так как без модулей $$$(i+i)/2=i$$$.

Решим задачу для чётных $$$N$$$. Если $$$N = 2$$$, то расстановки не существует, для остальных чётных $$$N$$$ — существует.

Представим, что у нас есть N/2 вариантов блоков из двух чисел размера 1 на 2, которые можно зеркально отражать. Пронумеруем каждый вариант от 1 до $$$N/2$$$ и на $$$i$$$-м варианте блока разместим числа $$$i$$$ и $$$i + N/2$$$.

Таким блоками нужно замостить квадрат N на N. В высоту будет N блоков, в ширину N/2. Рассмотрим шаблон из блоков с подряд идущими номерами от 1 до $$$N/2$$$. Заполним таким шаблоном первую и вторую строку. Затем сделаем циклический сдвиг шаблона влево и заполним следующие две строки. И так далее до конца таблицы. Пример полученной таблицы для $$$N = 6$$$ можно увидеть на рисунке (а). Далее сделаем циклический сдвиг всей таблицы вверх (см. рисунок (б)).

Затем будем идти по ячейкам таблицы на диагонали, смотреть, к какому блоку они принадлежат, и отражать соответствующий блок, чтобы на диагонали оказалось нужное число. В примере первый блок остаётся неизменным (см. рисунок (в)), а второй отражается (см. рисунок (г)). Результат прохода по диагонали можно увидеть на рисунке (д), не отражённые блоки покрашены зелёным цветом, а отражённые — синим. После этого пройдёмся по всем остальным блокам и отразим те блоки, варианты которых уже встречались выше с тем же отражением. Итоговый результат можно увидеть на рисунке (е).

Изначальная расстановка блоков гарантирует, что в каждой строке каждое число от 1 до $$$N$$$ встречается ровно один раз, а каждый вариант блока в каждом столбце встречается ровно два раза. Следовательно, отражениями можно всегда добиться, чтобы в каждом столбце каждое число от 1 до $$$N$$$ встречалось ровно один раз. Изначальный выбор пар чисел для блоков и расстановка гарантируют, что на диагонали всегда будет стоять блок с нужным числом.