मैं एक दिलचस्प सैद्धांतिक समस्या में कई साल पहले भागा था। मुझे कभी कोई हल नहीं मिला, और जब मैं सोता हूं तो यह मुझे परेशान करता रहता है।
मान लीजिए कि आपके पास एक (C #) एप्लिकेशन है जो किसी संख्या में एक int, x नाम से रखती है। (X का मान निश्चित नहीं है)। जब प्रोग्राम चलाया जाता है, तो x को 33 से गुणा किया जाता है और फिर एक फाइल पर लिखा जाता है।
मूल स्रोत कोड इस तरह दिखता है:
int x = getSomeInt();
x = x * 33;
file.WriteLine(x); // Writes x to the file in decimal format
कुछ साल बाद, आपको पता चलता है कि आपको एक्स बैक के मूल मूल्यों की आवश्यकता है। कुछ गणनाएं सरल हैं: बस संख्या को फ़ाइल में 33 से विभाजित करें। हालांकि, अन्य मामलों में, एक्स काफी बड़ा है कि गुणन एक पूर्णांक अतिप्रवाह का कारण बना। डॉक्स के अनुसार , C # उच्च-क्रम बिट्स को छोटा कर देगा, जब तक कि संख्या से कम न हो int.MaxValue
। क्या यह संभव है, इस मामले में, या तो:
- X को ही पुनर्प्राप्त करें या
- X के लिए संभावित मानों की सूची पुनर्प्राप्त करें?
यह मुझे लगता है (हालांकि मेरा तर्क निश्चित रूप से त्रुटिपूर्ण हो सकता है) कि एक या दोनों संभव होना चाहिए, क्योंकि अतिरिक्त कार्यों का सरल मामला (अनिवार्य रूप से यदि आप 10 से एक्स को जोड़ते हैं और इसे लपेटता है, तो आप 10 को घटा सकते हैं और एक्स के साथ फिर से हवा कर सकते हैं। ) और गुणन केवल बार-बार जोड़ा जाता है। साथ ही मदद करना (मेरा मानना है) यह तथ्य है कि एक्स सभी मामलों में एक ही मूल्य से गुणा किया जाता है - एक निरंतर 33।
यह वर्षों से मेरी खोपड़ी पर अजीब क्षणों के आसपास नृत्य कर रहा है। यह मेरे साथ घटित होगा, मैं इसके माध्यम से सोचने की कोशिश में कुछ समय बिताऊंगा और फिर कुछ महीनों के लिए इसे भूल जाऊंगा। मैं इस समस्या का पीछा करते हुए थक गया हूँ! क्या कोई अंतर्दृष्टि प्रदान कर सकता है?
(साइड नोट: मैं वास्तव में यह कैसे टैग करना नहीं जानता। सुझावों का स्वागत है।)
संपादित करें: मुझे यह स्पष्ट करने दें कि यदि मुझे X के लिए संभावित मानों की सूची मिल सकती है, तो अन्य परीक्षण हैं जो मुझे मूल मूल्य को कम करने में मदद करने के लिए कर सकते हैं।
m
सिर्फ 2 ^ 32 या 2 ^ 64 है, प्लस के घातांक a
सापेक्ष m
सीधा है (बस की अनदेखी अतिप्रवाह वहाँ)
r*s^-1 mod m
और आप दोनों को खोजने की जरूरत r
है और s
। यहाँ, हम है r*s mod m
और हम सब कुछ जानते हैं, लेकिन r
।