在 C++ 中求 y mod (2 的 x 次方) 的值
在這個問題中,我們給定兩個值 x 和 y。我們的任務是求 y mod (2 的 x 次方) 的值。
讓我們來看一個例子來理解這個問題:
Input : x = 2, y = 19 Output : 3
解釋 −
y % 2x = 19 % 22 = 19 % 4 = 3
解決方案方法
解決這個問題的一個簡單方法是直接使用 pow() 函式計算 2x 的值,然後求 y % 2x 的值。
另一種解決這個問題的方法是使用對數。對於 y < 2x 的情況,餘數是 y。對於這種情況,我們有
Log2y < x
此外,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
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP