2017-09-17 4 views
0

Ich verstehe, dass, damit diese Funktion funktioniert crtHasSolution muss zuerst wahr Ich habe Probleme zu beweisen, dass n eine Lösung sein könnte irgendwelche Ideen oder Tipps, wie man das in Haskell schreiben oder überprüfen?Haskell Chinese Remainder Theorem

Ich weiß, dass die Bedingungen für N sind, dass es größer oder gleich 0 und kleiner als m ist, was das Produkt aller mod Basen ist.

notes from where conclusion came from

crtHasSolution :: [Integer] -> [Integer] -> Bool 
crtHasSolution as ms = length as > 0 && 
         length ms > 0 && 
         length as == length ms && 
         all (>=0) as && 
         all (>=2) ms && 
         pairwise_coprime ms 

-- Is a given number a solution to a CRT problem? 
-- usage: crtIsSolution n as ms = ans 
-- assures: ans == True, if crtHasSolution as ms == True and n is a solution 
--   ans == False, otherwise 

crtIsSolution :: Integer -> [Integer] -> [Integer] -> Bool 
crtIsSolution n as ms = crtHasSolution as ms && 
         n >= 0 && 
         n < m 
         where m = 

code

+2

Was haben Sie bisher versucht? Es wäre besser, wenn du deinen Versuch zeigen könntest und wir dir dann in Bereichen helfen, in denen du feststeckst. – Sibi

+0

Wenn Sie sich das Codebild ansehen, das ich bisher ausprobiert habe, aber ich bin mir nicht sicher, ob das korrekt ist – ale

+5

für zukünftige Referenz, kopieren Sie einfach Ihren Code, anstatt es zu scannen. – rampion

Antwort

4

Von wikipedia:

Es ist leicht, zu prüfen, ob ein Wert von x eine Lösung ist: es genügt, den Rest der Division mit Rest zu berechnen von x von jedem [m_i].

Wenn x `mod` m_i /= a_i für jede i, dann ist x keine Lösung.

Diese schmatzt von Hausaufgaben, so anstatt geben Ihnen einen Einzeiler, die diese berechnet, werde ich Ihnen einige Leitfragen für die Implementierung von crtIsSolution n as ms geben:

  • Ist n eine Lösung, wenn ms und as sind leer?
  • Wenn Sie berechnen, ob n `mod` m_0 == a_0 und ob n ist eine Lösung für ms_0 und as_0, können Sie berechnen, ob n eine Lösung für m_0:ms_0 und a_0:as_0 ist?