Dados dos enteros positivos x e y. tenemos que encontrar el valor de y mod 2 x . Ese es el resto cuando y se divide por 2 x .
Ejemplos:
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.
Para resolver esta pregunta, podemos usar pow() y el operador módulo y podemos encontrar fácilmente el resto.
Pero hay algunos puntos que nos deben importar:
- Para un valor más alto de x tal que 2 x es mayor que el rango de int largo largo, no podemos obtener el resultado adecuado.
- Siempre que y < 2 x el resto siempre será y. Entonces, en ese caso, podemos limitarnos a calcular el valor de 2 x como:
y < 2x log y < x // means if log y is less than x, then // we can print y as remainder.
- El valor máximo de 2 x para el que podemos almacenar 2 x en una variable es 2 63 . Esto significa que para x > 63, y siempre será menor que 2 x y en ese caso el resto de y mod 2 x es y mismo.
Teniendo en cuenta los puntos anteriores, podemos abordar este problema como:
if (log y < x) return y; else if (x < 63) return y; else return (y % (pow(2, x)))
Nota: como python no tiene límites, podemos usar directamente la función mod y pow()
C++
// C++ Program to find the // value of y mod 2^x #include <bits/stdc++.h> 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
<?php // PHP Program to find the // value of y mod 2^x // function to // calculate y mod 2^x function yMod($y, $x) { // case 1 when y < 2^x if ((log($y) / 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 << $x)); } // Driver Code $y = 12345; $x = 11; echo (yMod($y, $x)); // This code is contributed by // Manish Shaw(manishshaw1) ?>
Javascript
<script> // Javascript program to find the // value of y mod 2^x // Function to calculate y mod 2^x function yMod(y, 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 << x)); } // Driver Code let y = 12345; let x = 11; document.write(yMod(y, x)); // This code is contributed by _saurabh_jaiswal </script>
Producción:
57
Complejidad del Tiempo: O(x)
Espacio auxiliar: O(1)
Calcular la división del módulo por una potencia de 2 números
Publicación traducida automáticamente
Artículo escrito por Shivam.Pradhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA