এই সমস্যায়, আমাদের x এবং y দুটি মান দেওয়া হয়েছে। আমাদের কাজ হল y মোডের মান খুঁজে বের করা (2 পাওয়ার x পর্যন্ত) .
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
Input : x = 2, y = 19 Output : 3
ব্যাখ্যা −
y % 2x = 19 % 22 = 19 % 4 = 3
সমাধান পদ্ধতি
সমস্যার একটি সহজ সমাধান হল সরাসরি 2 x এর মান গণনা করা pow() ফাংশন ব্যবহার করে তারপর y % 2 x এর মান খুঁজে বের করা .
সমস্যা সমাধানের আরেকটি পদ্ধতি হল লগ ব্যবহার করে। y <2 x এর মানের জন্য , অবশিষ্ট y। এই ক্ষেত্রে আমাদের আছে
লগ2 y
এছাড়াও, 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<<"The value of y mod 2^x is "<<findModVal(y, x);
return 0;
}
আউটপুট
The value of y mod 2^x is 909