আমি বেশ কয়েক বছর আগে একটি আকর্ষণীয় তাত্ত্বিক সমস্যার মধ্যে পড়েছিলাম। আমি কখনই এর সমাধান খুঁজে পাইনি এবং আমি যখন ঘুমাই তখন তা আমাকে পীড়িত করে।
ধরা যাক আপনার কাছে একটি (সি #) অ্যাপ্লিকেশন রয়েছে যা কোনও এক্সকে কিছু সংখ্যক ধারণ করে, x বলে। (X এর মান স্থির নয়)। প্রোগ্রামটি যখন চালানো হয়, এক্সটি 33 দ্বারা গুণিত হয় এবং তারপরে একটি ফাইলে লেখা হয়।
বেসিক উত্স কোডটি এর মতো দেখাচ্ছে:
int x = getSomeInt();
x = x * 33;
file.WriteLine(x); // Writes x to the file in decimal format
কয়েক বছর পরে, আপনি আবিষ্কার করেছেন যে আপনার X এর মূল মূল্য দরকার। কিছু গণনা সহজ: কেবলমাত্র ফাইলটিতে সংখ্যাটি 33 দ্বারা ভাগ করুন However তবে অন্য ক্ষেত্রে, এক্স যথেষ্ট পরিমাণে বৃহত যে গুণটি একটি পূর্ণসংখ্যার ওভারফ্লো করে। ডক্স অনুসারে , সি # সংখ্যাটি কম না হওয়া পর্যন্ত হাই-অর্ডার বিটগুলি কেটে ফেলবে int.MaxValue। এক্ষেত্রে কি সম্ভব?
- এক্স নিজেই পুনরুদ্ধার করুন বা
- এক্স এর সম্ভাব্য মানগুলির একটি তালিকা পুনরুদ্ধার করবেন?
এটি আমার কাছে মনে হয় (যদিও আমার যুক্তিটি অবশ্যই ত্রুটিযুক্ত হতে পারে) যেহেতু একটি বা উভয়ই সম্ভব হওয়া উচিত, যেহেতু সংযোজনগুলির সরল ক্ষেত্রে (মূলত আপনি যদি 10 থেকে X যোগ করেন এবং এটি আবৃত হয়, আপনি 10 কে বিয়োগ করতে পারবেন এবং আবার এক্স দিয়ে বায়ু আপ করতে পারেন ) এবং গুণন কেবল পুনরায় সংযোজন। এছাড়াও সহায়তা (আমি বিশ্বাস করি) সত্য যে এক্স সকল ক্ষেত্রে একই মান দ্বারা গুণিত হয় - একটি ধ্রুবক 33।
বছরের পর বছর ধরে এই আমার খুলির চারপাশে নাচছে। এটি আমার কাছে ঘটবে, আমি এটির মাধ্যমে চিন্তা করার চেষ্টা করার জন্য কিছু সময় ব্যয় করব এবং তারপরে আমি কয়েক মাসের জন্য এটি ভুলে যাব। আমি এই সমস্যার তাড়া করতে করতে ক্লান্ত! কেউ কি অন্তর্দৃষ্টি দিতে পারেন?
(পার্শ্ব দ্রষ্টব্য: আমি কীভাবে এটি ট্যাগ করতে জানি না Sug পরামর্শগুলি স্বাগত।
সম্পাদনা: আমাকে স্পষ্ট করে বলি যে আমি যদি এক্স এর জন্য সম্ভাব্য মানগুলির একটি তালিকা পেতে পারি, তবে এটির মূল মানের সাথে সংকীর্ণ করতে আমার আরও অন্যান্য পরীক্ষা থাকতে পারে are
mমাত্র 2 ^ 32 বা 2 ^ 64, প্লাস এর exponentiation aমডিউল mসহজবোধ্য (শুধু উপেক্ষা ওভারফ্লো সেখানে)
r*s^-1 mod mএটি আপনার কাছেই রয়েছে rএবং আপনার উভয়কেই খুঁজে বের করতে হবে s। এখানে, আমরা আছে r*s mod mএবং আমরা জানি কিন্তু r।