इस समस्या में, हमें दो मान x और y दिए गए हैं। हमारा काम है y mod का मान ज्ञात करना (2 घात x तक बढ़ा हुआ) ।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : x = 2, y = 19 Output : 3
स्पष्टीकरण -
y % 2x = 19 % 22 = 19 % 4 = 3
समाधान दृष्टिकोण
समस्या का एक सरल समाधान 2 x . के मान की सीधे गणना करना है पाउ () फ़ंक्शन का उपयोग करके और फिर y% 2 x . का मान ज्ञात करना ।
समस्या को हल करने का एक अन्य तरीका लॉग का उपयोग करना है। y <2 x . के मान के लिए , शेष y है। इस मामले के लिए हमारे पास है
लॉग<उप>2उप> वाई <एक्स
साथ ही, x का अधिकतम मान 63 हो सकता है जिसका y के लिए मान अतिप्रवाह होगा। इसलिए, mod 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<<"The value of y mod 2^x is "<<findModVal(y, x); return 0; }
आउटपुट
The value of y mod 2^x is 909