在 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

更新於:2022年2月1日

146 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.