Я великий фанат теорії чисел. Велика річ у теорії чисел - це модульна арифметика; визначення є тоді і тільки тоді, коли . Забавна річ - це підняття повноважень: особливо, коли модуль є простим числом. Зокрема, було доведено, що якщо a і m є відносно простими (не мають загальних факторів, крім 1 ), то існує число e таке, що a ^ e \ equiv 1 \ mod m .
Я поясню, що таке вправа на прикладі. Візьмемо модуль . Можливим виходом програми чи функції буде:
3 2 6 4 5 1
2 4 1 2 4 1
6 1 6 1 6 1
4 2 1 4 2 1
5 4 6 2 3 1
1 1 1 1 1 1
Кожен рядок - це перелік повноважень першого числа в цьому рядку: перший рядок - , що еквівалентно модуль . Другий ряд квадрата вгорі - це потужності , etcetera, аж до останнього ряду, які є лише повноваженнями .
Це магічний квадрат модуля, оскільки:
- Квадрат симетричний; тобто й стовпець такий самий, як й рядок.
- Усі значення від до з'являються принаймні один раз.
Нижче представлений єдиний інший дійсний вихід для , починаючи з потужностей :
5 4 6 2 3 1
4 2 1 4 2 1
6 1 6 1 6 1
2 4 1 2 4 1
3 2 6 4 5 1
1 1 1 1 1 1
Змагання
Створіть функцію або програму, яка дала простим p
виведенням магічний квадрат модуля, тобто квадрат із довжиною бічних сторін p-1
, таким чином, щоб кожен рядок був переліком послідовних повноважень першого елемента в рядку і однаковий для стовпців. Усі числа між 0
і p
повинні виникати, а квадрат може містити лише числа в цьому діапазоні.
Вхід - це число або рядок, а виведенням може бути ascii, матриця, масив масивів (будь-який розумний формат).
Це код-гольф, тому найкоротший код виграє.