在 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.