2013-04-04 10 views
5

मैं जावास्क्रिप्ट में एक साधारण एल्गोरिदम लागू करने की कोशिश कर रहा हूं। जहां भी मैं देखता हूं, यह कोड को 1 (mod N) पर काम करने के लिए कहता है। जहां तक ​​मैं कह सकता हूं, 1 मॉड्यूलो कुछ भी (या 1%N) 1.1 (मॉड एन) का क्या अर्थ है?

मुझे क्या याद आ रही है? क्या यह हमेशा 1 है, और यदि हां, तो क्यों न केवल 1 का उपयोग करें?

+2

"1 सापेक्ष कुछ भी (या 1% एन) 1 है" - जब तक एन 1 है, इस मामले में परिणाम शून्य है। –

+0

समझने की मुख्य बात यह है कि गणितीय नोटेशन में, '(mod n) 'अभिव्यक्ति के दोनों * पक्षों पर भी लागू होता है, यहां तक ​​कि हालांकि यह आमतौर पर केवल दाईं ओर लिखा जाता है ( देखें [मॉड्यूलर नोटेशन के बारे में उलझन में] (http://math.stackexchange.com/questions/78367/confused-about-modular-notations))। तो, ब्लेंडर के उत्तर को छोड़कर, अभिव्यक्ति 'ए ≡ 1 (मॉड एन)' को "≡ 1'" के रूप में पढ़ा जाना चाहिए जब सिस्टम लिया गया 'मॉड्यूलो एन'', या '% N == 1 % एन' (या सिर्फ '% n == 1', चूंकि' 1% एन' हमेशा बराबर होता है 1)। – sevko

उत्तर

9

एल्गोरिथ्म शायद कहते हैं की तरह कुछ:

x ≡ 1 (mod N) # x is congruent to 1 (modulo N) 

(mod N) और ट्रिपल बराबर चिह्न निरूपित है कि आप मॉड्यूलर अंकगणितीय, नहीं सामान्य गणित के साथ काम कर रहे हैं। एक घड़ी के हाथों की तरह सोचो। मॉड्यूलर अंकगणित में, x ≡ 1 का अर्थ है कि x और 1 उसी residue class से संबंधित हैं। यदि आपके पास N घंटे के डिवीजनों के साथ घड़ी है, तो हाथ 1 समय या x समय बदलना हाथ को एक ही अंत स्थिति में लाएगा। यदि x नकारात्मक कभी नहीं है

अपने विशिष्ट मामले के लिए, x ≡ 1 (mod N) जावास्क्रिप्ट में x % N === 1 के रूप में प्रतिनिधित्व किया जा सकता है। अन्यथा, आपकी समानता को तब भी नहीं रखा जाएगा जब तक यह होना चाहिए: उदाहरण के लिए, -1 ≡ 1 (mod 2) लेकिन (-1) % 2 === -1, जो 1 के बराबर नहीं है, भले ही वे मॉड्यूलर अंकगणितीय अर्थ में "बराबर" हों।

आप x की आशा करते हैं नकारात्मक होने के लिए, तो आप सिर्फ अनुरूपता संबंध पुनर्व्यवस्थित कर सकते हैं:

 x ≡ 1 (mod N) 
⇒ x - 1 ≡ 0 (mod N) 

x - 10 के अनुकूल किया जा रहा मतलब है कि यह N खुद से विभाज्य है, ताकि आप सापेक्ष ऑपरेटर सुरक्षित रूप से उपयोग कर सकते हैं:

if ((x - 1) % N === 0) { 
    ... 
} 
+1

स्पष्टीकरण के लिए: 'x ≡ 1 (मॉड एन)' वास्तव में * 'x% एन == 1% एन' है, जो' x% एन == 1' को सरल बनाता है क्योंकि '1% एन == 1' (मानते हुए 'एन' 1 नहीं है)। – sevko

1

कैसे सापेक्ष (%) ऑपरेटर काम करता है ECMA-262 §11.5.3 में परिभाषित किया गया है। तो कैसे सापेक्ष ऑपरेटर के संदर्भ के बिना

1 % -Infinity returns 1 
... 
1 % -2 returns 1 
1 % -1 returns 0 
1 % 0 returns NaN 
1 % 1 returns 0 
1 % 2 returns 1 
... 
1 % Infinity returns 1 

तैरता के लिए,

1 % -1.1 returns 1 
1 % 0.1 returns 0.09999999999999995 
1 % 0.6 returns 0.4 
1 % 0.5 returns 0 
1 % 0.4 returns 0.19999999999999996 
1 % 0.9 returns 0.09999999999999998 
1 % 1.1 returns 1 

:

पूर्णांकों के लिए: कुछ quirks रहे हैं, ECMAScript सापेक्ष ऑपरेटर तैरता के साथ-साथ पूर्णांकों स्वीकार करता है लागू किया जा रहा है, यह निर्धारित करना बहुत मुश्किल है कि इसका उपयोग क्यों किया जा रहा है। सबसे अच्छा कोड का दस्तावेज होगा, लेकिन मुझे लगता है कि यह उपलब्ध नहीं है।

एक प्रयोग है, जहां एक पूर्णांक की उम्मीद है, 0 और 1 के रूप में झूठी और बाकी सब कुछ के रूप में सही मूल्यांकन करने के लिए है, तो:

if (1 % n) { 
    // do this if n is something other than 0 or 1 
} 
संबंधित मुद्दे