Модульные уравнения в Haskell
Я хочу решить линейные и квадратичные модульные уравнения в Haskell в одной переменной. То, как я делаю это прямо сейчас, - это положить x = [1..]
в уравнении один за другим и найти остаток (expr `rem` p == 0
, если уравнение по модулю p
(не обязательно главным), где expr
имеет переменную x
). Я считаю, что это очень неэффективный процесс. Есть ли лучший способ сделать это?
1 ответов
решение модульных квадратичных уравнений включает в себя объединение:
- на Тонелли-Шенкса, алгоритм
- на Китайская Теорема Остатка
- и квадратичная формула (т. е. завершение площадь)
для Хаскелла arithmoi пакет имеет реализации этих алгоритмов. В частности, см. chineseRemainder, sqrtModP и sqrtModPP функции.
здесь вы можете найти некоторые примеры: