2015-10-26 8 views
7

Chcę rozwiązać równań liniowych i kwadratowych modułowych w Haskell w jednej zmiennej. Sposób, w jaki robię to teraz polega na umieszczeniu x = [1..] w równaniu jeden po drugim i znalezieniu pozostałej części (expr `rem` p == 0, jeżeli równanie to jest modulo p (niekoniecznie podstawowym), gdzie expr ma zmienną x). Uważam, że jest to bardzo nieefektywny proces. Czy istnieje lepszy sposób na zrobienie tego?modułowa równania w Haskell

+0

[To może pomóc] (http://math.stackexchange.com/a/261900/88047) –

+0

@BartekBanachewicz ja szukam metoda ogólna. W rzeczywistości w wyrażeniu są też inne stałe, które są określane przy użyciu innych środków, więc nie mogę ręcznie rozwiązać tego problemu, a następnie użyć tych wyników. – Iguana

+0

jest to metoda numeryczna/algrotihm? jeśli tak, możesz dodać odpowiedni tag. –

Odpowiedz

5

Rozwiązywanie modularnych równań kwadratowych obejmuje łączenie:

Dla Haskell pakiet arithmoi ma implementacje tych algorytmów. W szczególności, patrz funkcje chineseRemainder, sqrtModP i sqrtModPP.

Tutaj można znaleźć kilka przykładów: pracował

http://www.mersennewiki.org/index.php/Modular_Square_Root

+2

Bądź bardzo ostrożny z pakiet 'arithmoi'. Ma co najmniej jeden błąd w swoim głównym kodzie sita, który powoduje nieregularne błędy segmentacji. Kod jest * wyjątkowo * owłosiony i słabo udokumentowany, a pomimo tego, że pakiet ma nowego opiekuna, nie ma oznak, że w najbliższym czasie się poprawi. – dfeuer

Powiązane problemy