ในปัญหานี้ เราได้รับค่า x และ y งานของเราคือการหาค่า y mod (2x)
ตัวอย่างเพื่อเข้าใจปัญหา
Input: x = 2, y = 19 Output: 3
เพราะ 19 % 22 = 19 % 4 = 3
วิธีการแก้ปัญหา
พิจารณา 3 กรณีหลัก:
- ถ้า log2(y) < x → ผลลัพธ์คือ y (เพราะ y < 2x)
- ถ้า x > 63 → ผลลัพธ์คือ y (ป้องกัน overflow)
- กรณีอื่น → คำนวณ y % (1 << x)
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
long long findModVal(long long y, int x) {
if (log2(y) < x) return y;
if (x > 63) return y;
return (y % (1LL << x));
}
int main() {
long long 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