Как стать автором
Обновить

Комментарии 13

 иными словами задачу нахождения такой перестановки x, что x * x = p. 

не серчайте, но если пишете пост на более-менее широкую публику, то эта фраза мало что объясняет непосвещенному (мне она понятна хоть и не с первого прочтения)

Плюс неплохо будет смотреться пояснение - зачем нам это знание :)

Добрый день!
Откровенно говоря, я прекрасно понимаю, что непосвященному эта статья вообще ничего не скажет, потому что никакой подготовки я практически не даю. Сомневаюсь, что это заинтересует публику, поэтому я даже не стал стараться.

"Зачем нам это знание" - не знаю) Мог бы отделаться словами, что имеет применение в криптографии, но это мой максимум.

Да нет, достаточно забавная комбинаторная задачка, и с момента, как вы сказали про "паспорт" перестановки – достаточно несложная, но всё равно получил удовольствие, прикинув способ вычисления и сверив с вашими рассуждениями.

Возможно, стоило дать какую-нибудь "детскую" формулировку, не опирающуюся на другие определения (это часто практикуется в комбинаторных задачках для программистов), но и так неплохо вышло.

Спасибо!

"Зачем нам это знание" - не знаю)

Возможно, оно имеет отношение к очень занятной штуке: есть какая-то связь между типами и структурой полиморфных функций, а также тестами, которые надо для этих функций писать.

Можете посмотреть статью Wadler'a "Theorems for free", он в ней не упоминает этого, но всё строится на том, что есть симметрия полиморфных функций относительно преобразований внутри множества. Например, функция с сигнатурой

f :: [a] -> [a]

коммутирует с функцией, работающей исключительно внутри множества a.

Можно подойти с другой стороны - у Кнута есть знаменитая теорема о том, что сортировку, базирующуюся на операции CAS (compare-and-swap), можно проверить на булевых числах, и тогда она гарантированно будет работать на целых. Шутка в том, что операция cas имеет сигнатуру

cas :: (a, a) -> (a, a)

То есть, тоже симметрично относительно каких-то преобразований в a. Эти два момента, грубо говоря, связывают тесты, полиморфизм и симметрии. И, значит, практическое применение тут - создание какого-то подхода, который позволит резко уменьшить число тестов.

Поэтому, возможно, вся эта теор-групповая штука имеет большое значение и вне криптографии.

Вчерась в МГУ дядька кошек с собаками не стеснялся при детях складывать.

Число решений квадратного уравнения в конечной группе может быть найдено через ее линейные представления и их характеры. Для групп перестановок таблицы характеров известны, а формула сводится к суммированию по всем неприводимым характерами. Больше подробностей в этом сообщении https://mathoverflow.net/a/41788

Я конечно не претендую на истину в последней инстанции  , но мне кажется что ваше изложение  данной темы несколько громоздко и потому непонятно для тех , кто не в теме .

Я думаю , что писать перестановки надо  в виде произведения циклов   :  так нагляднее и на мой взгляд – понятнее ,  ( рядом пишу вашу запись )  . Итак :

1 ) s =  ( 1 , 2, 3, 4 , 5 ) (6) = { 2,3,4,5,1,6 } 

Так как для любой вообще перестановки p всегда существует натуральное число m , такое что : p^m=e ( или  p^(m+1)=p ) , где e – тождественная перестановка ( это очевидно , так как степени конкретно взятой перестановки образуют подгруппу конечной группы – группы всех перестановок данного множества ) . В частности для цикла длинной m  это и есть минимальная степень ( тоже очевидно ) . Итак – в нашем случае m=5 . Поэтому s^((m+1)/2) = s^3– корень данной перестановки и он единственный . То есть сразу и без вычисления , смотря на сам цикл , пишем ответ :

P= ( 1 , 4 , 2 , 5 , 3 ) ( 6 )      ;   p^2 = s 

2 ) s = ( 1 , 2 ) ( 3 ,4 ) ( 5) ( 6) = { 2 , 1 ,4 , 3 , 5 , 6 }

Видим два четных цикла длины два и значит будем иметь два варианта цикла длины четыре ( поменяв их местами )  , один вариант цикла длины два ( объединив единичные )  и оставляя единичные  циклы неизменными . Всего четыре варианта . И тоже , можем сразу и без вычислений , лишь глядя на исходное представление перестановки , писать ответы :

P1= ( 1 ,3 , 2 , 4 ) ( 5 ) (6) ;  P2= ( 1 ,4 , 2 , 3 ) ( 5 ) (6)  ;  P3= ( 1 ,3 , 2 , 4 ) ( 5 ,6)  ; P4= ( 1 ,4 , 2 , 3 ) ( 5 ,6) 

Pk^2= s .  

3) s = ( 1 , 2 , 3 ) ( 4 ) ( 5) ( 6) = { 2 , 3 ,1 , 4 , 5 , 6 }

Видим один цикл длины три и три цикла единичной длины . У нас всего три варианта объединить единичные циклы в цикл длиной два и один вариант – оставить единичные циклы .  Всего четыре корня :

 P1= ( 1 ,3 , 2  ) ( 4, 5 ) (6) ;  P2= ( 1 ,3 , 2 ) ( 4, 6 ) (5);  P3= ( 1 ,3 , 2 ) ( 5 ,6) (4) ; P1= ( 1 ,3 , 2  ) ( 4 ) ( 5 ) (6)

Pk^2= s .

4) s = ( 1 , 2 ) ( 3 , 4 ) ( 5 , 6 , 7 ) = { 2 , 1 , 4 , 3 , 6 , 7 , 5 }

Имеем два цикла длиной два и один цикл длиной три . То есть здесь будут всего два корня от перемены мест двух четных циклов :

( 1 , 2 ) ( 3 , 4 )  получим ( 1 , 3 , 2 , 4 )  и ( 3 , 4 ) ( 1 , 2 )  получим  ( 3 , 1 , 4  , 2 ) = ( 1 , 4 , 2 , 3 ) . Итак , имеем :

P1= ( 5 ,7 , 6  ) ( 1, 3 , 2 , 4 ) ;  P2= ( 5 ,7 , 6  ) ( 1, 4 , 2 , 3 )  ; Pk^2= s .

5 ) s = ( 1 , 2 , 3 , 4 , 5 ) ( 6 ) ( 7)  = { 2 , 3 ,4 , 5 , 1 , 6 , 7 }

Видим один цикл длины 5 и два единичных цикла . А значит всего два корня – оставляем единичные циклы без изменений и объединяем их . Так как ( 5+1)/2 = 3 , то s^3 – корень квадратный . Итак :

  P1= ( 1 ,4 , 2 , 5 , 3 ) ( 6 ) ( 7) ;  P2= = ( 1 ,4 , 2 , 5 , 3 ) ( 6 , 7) ; Pk^2= s .

Ну и так далее . Все вычисляется вручную и очень быстро …  

Здравствуйте!

Именно подход с цикловой записью, о которой вы пишете, в статье и применяется. Алгоритмы у нас совпадают.

Задача же в том, чтобы посчитать количество корней в общем виде, зная паспорт перестановки.

Вот именно : формула для числа корней в общем виде совсем не очевидна , по кра

Вот именно : формула для числа корней в общем виде совсем не очевидна , по крайней мере для меня . Любопытно было бы увидеть подробное доказательство .

Я думаю проще попытаться найти контрпример , посчитав число корней x^2=e для групп вида S(p^n) , где р - простое . И сравнить результат .

Извиняюсь , опечатался : хотел написать S(p*2^n) , где р - простое . То есть проверить формулу для групп S3 и S4 для числа корней x^2=e

Я бы посоветовал вместо корневой карты рисовать перестановки в виде циклов (граф где n вершин и направленое ребро из i в p(i)). Потом на картинке показать, что просиходит с перестановкой при возведении в квадрат. Вот так вы наглядно покажете, что нечетные циклы просто перетасовываются, а четные распадаются на 2 цикла одинаковой длины.

Оттуда будет более наглядно видно, что для обратной операции можно циклы нечетной длины перетасовывать определенным образом, а также объединять по 2 цикла одинаковой длины в один. Раз надо все циклы так обработать, то и получается ваш критерий - циклы четной длины должны идти парой с циклом такой же длины.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации