এই সমস্যায়, আমাদের 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