इस समस्या में, हमें दो मान x और y दिए गए हैं। हमारा कार्य y mod (2 की घात x) का मान ज्ञात करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट : x = 2, y = 19 आउटपुट : 3
व्याख्या −
y % 2x = 19 % 22 = 19 % 4 = 3
समाधान दृष्टिकोण
समस्या का एक सरल समाधान pow() फ़ंक्शन का उपयोग करके 2x का मान सीधे परिकलित करना और फिर y % 2x का मान ज्ञात करना है।
समस्या को हल करने का एक अन्य दृष्टिकोण लॉग का उपयोग करना है। y < 2x के मान के लिए, शेषफल y है। इस मामले में हमारे पास है
Log2y < x
साथ ही, x का अधिकतम मान 63 हो सकता है जिसका मान y के लिए ओवरफ्लो होगा। इसलिए, मॉड x के बराबर है।
इन सभी को ध्यान में रखते हुए, हमारे पास ये तीन मामले हैं −
if(log y < x) -> return y else if(x > 63) -> return y else -> return (y % pow(2, x))
उदाहरण
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
#include <bits/stdc++.h> using namespace std; long long int findModVal(long long int y, int x){ if (log2(y) < x) return y; if (x > 63) return y; return (y % (1 << x)); } int main(){ long long int y = 82829; int x = 12; cout<<"y mod 2^x का मान है "<<findModVal(y, x); return 0; } आउटपुट
y mod 2^x का मान है 909