在 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