Рассмотрим целые числа по модулю q
где q
простое число, генератор - это любое целое число, 1 < x < q
так что оно x^1, x^2, ..., x^(q-1)
охватывает все q-1
целые числа между 1
и q-1
. Например, рассмотрим целые числа по модулю 7 (которые мы записываем как Z_7
). Затем 3, 3^2 mod 7 = 2, 3^3 = 27 mod 7 = 6, 3^4 = 81 mod 7 = 4, 3^5 = 243 mod 7 = 5, 3^6 = 729 mod 7 = 1
охватывает все значения 3, 2, 6, 4, 5, 1
охватывает все целые числа, 1..6
как требуется.
Задача состоит в том, чтобы написать код, который принимает вход n
и выводит генератор для Z_n
. Вы не можете использовать любую встроенную функцию или библиотеку, которая делает это за вас, конечно.
Единственным ограничением производительности вашего кода является то, что вы должны его протестировать до завершения n = 4257452468389
.
Обратите внимание, что 2^n
означает 2
власть n
. Это ^
представляет возведение в степень.
1 < x < q
намного облегчает задачу.Ответы:
Pyth,
1615 байтТестирование
Если p является входным значением, мы знаем, что g ^ (p-1) = 1 mod p, поэтому нам просто нужно проверить, что g ^ a! = 1 mod p для любого меньшего a. Но a должно быть коэффициентом p-1, чтобы это было возможно, и любой кратный a с этим свойством также будет иметь это свойство, поэтому нам нужно только проверить, что g ^ ((p-1) / q)! = 1 mod p для всех простых факторов q в p-1. Итак, мы проверяем все целые числа g в возрастающем порядке, пока не найдем то, которое работает.
Объяснение:
источник
PtQ
часть).Mathematica, 52 байта
Вдохновлен ответом Исаака .
источник
источник