Вы ищете наименьшее число o
, такое, что a^o == 1 (mod p)
, то есть наименьшее o
, такое, что p
делит a^o - 1
.
. Результаты теории групп, которые вам нужны, заключаются в том, чтоМультипликативная группа целых чисел mod p является циклической порядка p-1.Это означает, что:
- Порядок
o
делит p-1
и удовлетворяет a^o == 1 (mod p)
- Порядок
o
является наименьшим числом, которое удовлетворяет предыдущему условию.
Таким образом, вы можете найти порядок, взяв простые множители p-1
и многократно поделив на них p-1
, пока не перестанет быть верным, что p
делит a^n - 1
.
Пример 1 : p = 13, p-1 = 2 * 2 * 3, a = 5.
Для p = 2, 5 ^ (12/2) == 12 (мод 13), поэтому вы не можете потерять 2 в порядке.
Для p = 3, 5 ^ (12/3) == 1 (мод 13), поэтому вы можете потерять 3 вorder.
Таким образом, порядок равен 2 * 2 = 4.
Данный пример (p = 17) является еще одним иллюстративным случаем:
Пример 2: p = 17, p-1 = 2 * 2 * 2 * 2, a = 9
9 ^ (16/2) == 1 (мод 17), поэтому вы можете проиграть первый2.
9 ^ (16/4) == 16 (мод 17), поэтому вы не можете потерять 2 секунды и можете прекратить поиск.
Таким образом, порядок равен 2* 2 * 2 = 8.
Надеюсь, чтоЭто должно быть достаточно для вас, чтобы увидеть алгоритм.