2011-11-17 17 views
7

बड़ी संख्या के साथ गणना मॉड्यूलो एन करते समय, उदाहरण के लिए mod (123456789^987654321) n के दौरान आपको बड़ी प्रदर्शनता दंड का सामना करना पड़ेगा। इसके बजाय आपको अपने ^ का उपयोग करना होगा जो आंतरिक रूप से इंटरमीडिएट गणनाओं के लिए मॉड एन की भी गणना करता है।अभिव्यक्तियों की गणना मॉड्यूलो एन

निश्चित रूप से, मैं आसानी से अपने कार्यों को कार्यान्वित कर सकता हूं, लेकिन फिर मुझे प्रत्येक ऑपरेशन के लिए स्पष्ट रूप से "mod n" कहना होगा। इसके बजाय कोई एक संख्यात्मक अभिव्यक्ति वृक्ष का निर्माण कर सकता है और वास्तविक गणना को रोक सकता है, और अंत में राज्य मॉड्यूलो एन केवल एक बार। (नीचे मेरा कोड देखें)

मैंने स्पष्ट रूप से यह दिखाने के लिए शुरुआत की कि मेरा क्या मतलब है, लेकिन मुझे आश्चर्य है कि इसमें पहले से ही कार्यान्वयन मौजूद हैं, ऐसा लगता है कि किसी को इसे लागू करना चाहिए था।

module Modulo where 

data Expr = 
    V Integer 
    | Plus Expr Expr 
    | Mult Expr Expr 
    deriving (Eq, Show) 

instance Num Expr where 
    (+) = Plus 
    (*) = Mult 
    fromInteger = V 

eval :: Integer -> Expr -> Integer 
eval m (V i) = i `mod` m 
eval m (Plus e1 e2) = (eval m e1 + eval m e2) `mod` m 
eval m (Mult e1 e2) = (eval m e1 * eval m e2) `mod` m 

fifteen :: Expr 
fifteen = 10 + 5 

test = eval 13 fifteen 
+2

क्या आपको 'एम' में 'एम' में रनटाइम पर बदलने योग्य होना चाहिए, या यह संकलन समय पर तय करने के लिए पर्याप्त है? यदि संकलन-समय पर्याप्त मामला है, तो आप बस कुछ नए टाइप किए गए 'इंटीगर' के लिए एक मॉड्यूलो-अरिथेमेटिक 'न्यू'-उदाहरण परिभाषित कर सकते हैं ... – hvr

+0

मैं इसे रनटाइम पर बदलना चाहता हूं। क्षमा करें, मुझे इसका उल्लेख करना चाहिए था। – Tarrasch

उत्तर

3

ओलेग इस तरह है, जहां आप सापेक्ष अंकगणित के लिए एक उदाहरण बनाने के लिए कुछ किया है, लेकिन एक मनमाना मापांक के लिए। Implicit configurations.

+0

मुझे यह नहीं मिला। क्या आप एक वैज्ञानिक पेपर या वास्तविक कार्यान्वयन से जुड़ रहे हैं? यदि यह एक कार्यान्वयन है, तो क्या आप एक कोड उदाहरण प्रदान कर सकते हैं? – Tarrasch

+1

क्या आपने लिंक को देखने से परेशान किया? इसमें पेपर है, और एक कार्यान्वयन भी है। एक रीडमे फ़ाइल भी है जो बताती है कि फाइलों में क्या है। – augustss

+0

मैंने वेब पेज पर सार को स्किम किया और मॉड्यूलो के बारे में कुछ भी नहीं मिला, जाहिर है कि सिद्धांत पहली बार आंख से मिले थे उससे गहरा था। अब मुझे कार्यान्वयन और कागज मिला। आप बिल्कुल सही हैं, यह वही था जो मैं ढूंढ रहा था। मेरे शुरुआती झुकाव के लिए खेद है, मुझे लगता है कि कोई भी एक गिथब रेपो से लिंक करेगा, न कि कागज। – Tarrasch

संबंधित मुद्दे