ในปัญหานี้ เราได้รับค่า x และ y สองค่า งานของเราคือ หาค่าของ y mod (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 ดังนั้น 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