Фуллер объяснение:
Если у вас есть полномочия целого по модулю некоторого другого целого числа, эти силы всегда идут в цикле. Например, пусть п = 3, р = 10, и обозначение (3, К, 10) = 3 ^ к модулю 10.
(3,1,10) = 3
(3,2,10) = [(3,1,10) * 3] по модулю 10 = (3 * 3) по модулю 10 = 9
(3,3,10) = [(3,2,10) * 3] по модулю 10 = (9 * 3) по модулю 10 = 7
(3,4,10) = [(3,3,10) * 3] по модулю 10 = (7 * 3) по модулю 10 = 1
(3,5,10) = [(3,4,10) * 3] по модулю 10 = (1 * 3) по модулю 10 = 3
(3,6,10) = [(3,5,10) * 3] по модулю 10 = (3 * 3) по модулю 10 = 9
(3,7,10) = [(3,6,10) * 3] по модулю 10 = (9 * 3) по модулю 10 = 7
(3,8,10) = [(3,7,10) * 3] по модулю 10 = (7 * 3) по модулю 10 = 1
И так далее.
Так оказывается, что для простых чисел длина цикла должна быть фактором р-1, так что п ^ (р-1) по модулю р = 1, хотя он может также равен 1 в одной или нескольких промежуточных точках. Вы можете найти доказательства этого здесь:
http://en.wikipedia.org/wiki/Proofs_of_Fermat's_little_theorem#Necklaces.
Например, при п = 3, р = 11, цикл выглядит следующим образом:
3,9,5,4,1,3,9,5,4,1,3 ...
Обратите внимание на то, как 3 ^ 10 по модулю 11 = 1, хотя 3 ^ 5 мод 11 также = 1. При п = 6, р = 11, цикл продолжается:
6,3,7,9,10,5,8,4,2,1,6 ...
Критерием для ряда к циклу в (р-1) / 2 шага, а не (р-1) является то, что число должно быть
квадратичный вычет, Это означает, что он должен быть квадратом другого числа по модулю р. При р = 11, например, 3 = 6 ^ 2 мод 11 (с 6 ^ 2 = 36, и ближайший кратно 11 ниже 36 составляет 33). Причина, почему это так просто: если п квадратичный вычет, он может быть представлен в виде к ^ 2 по модулю р. Так как к циклу должен каждые п-1 шагов, и каждый шаг п соответствует 2 шага к, п можно покрыть цикл в (р-1) / 2 шагов.
Теперь перейдем к главной задаче.
Мы пытаемся найти квадратный корень из п по модулю р. Что это означает, что мы хотим, чтобы найти некоторое число к, что к ^ 2 по модулю р = п. Тем не менее, мы знаем, что это к существует, поэтому п должен быть квадратичным вычетом. Это означает, что длина цикла п (р-1) / 2, а это означает, что:
п ^ [(р-1) / 2] по модулю р = 1
п ^ [(р-1) / 2 + 1] по модулю р = п
п ^ [(р + 1) / 2] по модулю р = п
Если (р + 1) / 2 сама по себе четное число, то мы можем идти точно (р + 1) / 4 шага, чтобы получить к. Теперь, что это значение к ^ 2 по модулю р?
к ^ 2 по модулю р = {п ^ [(р + 1) / 4]} ^ 2 по модулю р = {п ^ [(р + 1) / 2]} по модулю р = п
И там у вас есть, вы нашли значение к, которое удовлетворяет условие, что делает его квадратный корень из п. Единственным условием для этого алгоритма является то, что (р + 1) / 2 четно, то есть. р + 1 является кратным 4, или п той 4 = 3.