Я большой поклонник теории чисел. Большая вещь в теории чисел - модульная арифметика; определение является тогда и только тогда, когда . Забавная вещь, которую нужно сделать, это подняться до степеней, особенно когда модуль является простым числом. В частности, было доказано, что если и относительно простые (не имеют общих общих факторов, кроме ), то существует число такое, что .
Я объясню, что упражнение на примере. Давайте возьмем модуль . Возможный вывод программы или функции будет:
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
Каждая строка представляет собой список степеней первого числа в этой строке: первая строка , что эквивалентно по модулю . Второй ряд квадрата выше - это степени , и так далее, до последнего ряда, которые являются степенями .
Это волшебный квадрат по модулю, потому что:
- Квадрат симметричный; то есть й столбец такой же, как и й ряд.
- Все значения от до появляются как минимум один раз.
Ниже приведен единственный другой действительный выход для , начиная с степеней :
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, матрица, массив массивов (любой приемлемый формат).
Это код-гольф, поэтому выигрывает самый короткий код.