Решение системы модулярных уравнений

Тема в разделе "WASM.A&O", создана пользователем ECk, 22 фев 2006.

  1. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Доброго времени суток!

    Не знает ли случайно кто-нибудь методов решения систем

    модулярных уравнений второго, третьего и выше порядков?

    В двух словах, конструкция типа:

    x^k=a1 mod C

    x^l=a2 mod C

    x^m=a3 mod C

    ...etc

    Переменная (x) и модуль (С) - одни и те же во всех уравнениях, степени и результаты - разные

    Спасибо!
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Пардон, я не совсем понял, что требуется найти :) Похоже, между прочим, на проблему дискретного логарифма :)
     
  3. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Интересует вообще, существуют ли методы решения таких систем? Решение системы линейных уравнений (с несколькими неизвестными) по модулю - возможно и достаточно тривиально (при условии наличия необходимого числа уравнений, не меньше числа неизвестных, как для любой системы). Причем, как для общего для всех уравнений модуля, так и для различных модулей для каждого.

    Но там линейные уравнения, а в данном случае - нет
     
  4. halyavin

    halyavin New Member

    Публикаций:
    0
    Регистрация:
    13 май 2005
    Сообщения:
    252
    Адрес:
    Russia
    На сколько велики степени? На сколько велико С? Является ли оно простым?
     
  5. optio

    optio Алексей

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    12
    Адрес:
    Томск
    Приведу решение - громоздко - но может увидишь направление в котором надо двигаться...



    Хм... существует метод решения сравнений x^n=a(mod p) где p простое (для произвольного модуля - свести к системе сравнений по простым делителям модуля - потом эту систему надо свернуть в одну по Китайской Теореме об Остатках)



    Идея в следующем x^n=a(mod p) <=> n*log(x)=log(a)(mod p-1) второе - линейное, потом y=log(x) - находишь x

    Логарифмируешь по первообразному корню для данного модуля, скажем алгоритмом "больших и малых шагов" (baby step - giant step)



    осталось разобраться с системой



    x^l=a mod C

    ...

    x^r=b mod C



    каждое решаешь - получишь

    x={x11, ... x1N} mod C

    ....

    x={xM1, ... xMK} mod C



    ну тут надо выбрать х который удовлетворит всем системам



    ---------------------------------------------------



    возможно можно использовать факт что все уравнения по одному модулю - хз, надо подумать...
     
  6. optio

    optio Алексей

    Публикаций:
    0
    Регистрация:
    8 янв 2006
    Сообщения:
    12
    Адрес:
    Томск
    Да кстати, если степень вторая то можно не изврашаться через дискретные логарифмы, но это так к слову...







    Все что больше двух уже гадко...
     
  7. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    ECk



    Можно записать в виде x^{k+l+m...} = a<sub>1</sub>*a<sub>2</sub>*a<sub>3</sub>*... mod C

    найти все решения x(логарифмирование) и простой подстановкой в исходную систему выбрать из них правильные.



    volodya





    Она и есть :)
     
  8. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Всем спасибо за ответы!

    В общем случае, это не совсем проблема дискретного логарифма (скорее это попытка решить таким образом проблему поиска идемпонент группы С)
     
  9. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    Во-первых, надо вычислить d=НОД(k,l,m,...) который как известно представляется в виде линейной комбинации

    d = u*k + v*l + w*m + ...

    которая соответствует сравнению

    x^d = a1^u * a2^v * a3^m * ... (mod C)

    причем это сравнение равносильно исходной системе.



    Если повезет и d=1, то вот оно - решение. Если нет - то придется логарифмировать.