给定两个正整数x和y。我们必须找到y mod 2 x的值。当y除以2 x时,就是余数。
例子:
Input : x = 3, y = 14
Output : 6
Explanation : 14 % 23 = 14 % 8 = 6.
Input : x = 4, y = 14
Output : 14
Explanation : 14 % 24 = 14 % 16 = 14.
为了解决这个问题,我们可以使用pow()和取模运算符,并且可以轻松地找到余数。
但是,我们需要注意以下几点:
- 对于较高的x值,使得2 x大于long long int范围,我们将无法获得正确的结果。
- 每当y <2 x时,余数将始终为y。因此,在这种情况下,我们可以限制自己将2 x的值计算为:
y < 2x
log y < x
// means if log y is less than x, then
// we can print y as remainder.
- 我们可以将2 x存储在变量中的2 x的最大值是2 63 。这意味着对于x> 63,y总是小于2 x ,在这种情况下,y mod 2 x的其余部分就是y本身。
牢记以上几点,我们可以通过以下方式解决此问题:
if (log y < x)
return y;
else if (x < 63)
return y;
else
return (y % (pow(2, x)))
注意:由于Python是无限制的,因此我们可以直接使用mod和pow()函数
C++
// C++ Program to find the
// value of y mod 2^x
#include
using namespace std;
// function to calculate y mod 2^x
long long int yMod(long long int y,
long long int x)
{
// case 1 when y < 2^x
if (log2(y) < x)
return y;
// case 2 when 2^x is out of
// range means again y < 2^x
if (x > 63)
return y;
// if y > 2^x
return (y % (1 << x));
}
// driver program
int main()
{
long long int y = 12345;
long long int x = 11;
cout << yMod(y, x);
return 0;
}
Java
// Java Program to find
// the value of y mod 2^x
import java.io.*;
class GFG
{
// function to calculate
// y mod 2^x
static long yMod(long y,
long x)
{
// case 1 when y < 2^x
if ((Math.log(y) /
Math.log(2)) < x)
return y;
// case 2 when 2^x is
// out of range means
// again y < 2^x
if (x > 63)
return y;
// if y > 2^x
return (y % (1 << (int)x));
}
// Driver Code
public static void main(String args[])
{
long y = 12345;
long x = 11;
System.out.print(yMod(y, x));
}
}
// This code is contributed by
// Manish Shaw(manishshaw1)
Python3
# Program to find the value
# of y mod 2 ^ x function to
# return y mod 2 ^ x
def yMod(y, x) :
return (y % pow(2, x))
# Driver code
y = 12345
x = 11
print(yMod(y, x))
C#
// C# Program to find the
// value of y mod 2^x
using System;
class GFG
{
// function to calculate
// y mod 2^x
static long yMod(long y,
long x)
{
// case 1 when y < 2^x
if (Math.Log(y, 2) < x)
return y;
// case 2 when 2^x is
// out of range means
// again y < 2^x
if (x > 63)
return y;
// if y > 2^x
return (y % (1 << (int)x));
}
// Driver Code
static void Main()
{
long y = 12345;
long x = 11;
Console.Write(yMod(y, x));
}
}
// This code is contributed by
// Manish Shaw(manishshaw1)
PHP
63)
return $y;
// if y > 2^x
return ($y % (1 << $x));
}
// Driver Code
$y = 12345;
$x = 11;
echo (yMod($y, $x));
// This code is contributed by
// Manish Shaw(manishshaw1)
?>
Javascript
输出:
57
时间复杂度: O(x)
辅助空间: O(1)
计算模数除以2的幂