Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาค่า y mod (2^x) ใน C++

ในปัญหานี้ เราได้รับค่า x และ y งานของเราคือการหาค่า y mod (2x)

ตัวอย่างเพื่อเข้าใจปัญหา

Input: x = 2, y = 19 Output: 3

เพราะ 19 % 22 = 19 % 4 = 3

วิธีการแก้ปัญหา

พิจารณา 3 กรณีหลัก:

  1. ถ้า log2(y) < x → ผลลัพธ์คือ y (เพราะ y < 2x)
  2. ถ้า x > 63 → ผลลัพธ์คือ y (ป้องกัน overflow)
  3. กรณีอื่น → คำนวณ 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