Рубрики

Вычислить деление модуля на степень числа 2

Вычислите n по модулю d без операторов деления (/) и по модулю (%), где d — степень числа 2.

Пусть i- й бит справа установлен в d. Для получения n модуля d нам просто нужно вернуть 0 в i -1 (справа) биты n, как они есть, а другие биты как 0.

Например, если n = 6 (00..110) и d = 4 (00..100). Последний установленный бит в d находится в позиции 3 (с правой стороны). Поэтому нам нужно вернуть последние два бита n, как они есть, а остальные биты — 0, т. Е. 00..010.

Теперь сделать это так просто, угадай это …

Да, вы правильно догадались. Смотрите программу ниже.

C ++

#include<stdio.h>

  
// Эта функция вернет n% d.
// d должно быть одним из: 1, 2, 4, 8, 16, 32,…

unsigned int getModulo(unsigned int n, 

                       unsigned int d)

{

return ( n & (d - 1) );

}         

  
// Код драйвера

int main()

{

unsigned int n = 6;

  
// d должно быть степенью 2

unsigned int d = 4; 

printf("%u moduo %u is %u", n, d, getModulo(n, d));

  

getchar();

return 0;

}     

Джава

// Java-код для вычисления модуля деления на
// степень числа 2

class GFG {

      

    // Эта функция вернет n% d.

    // d должно быть одним из: 1, 2, 4, 8, 16, 32,

    static int getModulo(int n, int d)

    {

        return ( n & (d-1) );

    }     

      

    // Код драйвера

    public static void main(String[] args)

    {

        int n = 6;

          

        / * d должно быть степенью 2 * /

        int d = 4

          

        System.out.println(n+" moduo " + d + 

                    " is " + getModulo(n, d));

    }

  
// Этот код добавлен
// Смита Динеш Семвал.

python3

# Код Python для демонстрации
# модуль деления на степень 2

  

  
# Эта функция будет
# вернуть n% d.
# d должен быть одним из:
# 1, 2, 4, 8, 16, 32,…

def getModulo(n, d):

  

    return ( n & (d-1) )

           
# Драйвер программы для
# проверка над функцией

n = 6

  
#d должно быть степенью 2

d = 4 

print(n,"moduo",d,"is",

      getModulo(n, d))

  
# Этот код предоставлен
# Смита Динеш Семвал

C #

// C # код для вычисления модуля
// деление на степень-2-числа

using System;

  

class GFG {

      
// Эта функция вернет n% d.
// d должно быть одним из: 1, 2, 4, 8, 16, 32,…

static uint getModulo( uint n, uint d)

{

return ( n & (d-1) );

}     

  
// Код драйвера

static public void Main () 

   {

    uint n = 6;

    uint d = 4; / * d должно быть степенью 2 * /

  

    Console.WriteLine( n + " moduo " + d + 

                " is " + getModulo(n, d));

      

    }

}
// Этот код предоставлен vt_m.

PHP

<?php
// Эта функция вернет n% d.
// d должно быть одним из: 1, 2, 4, 8, 16, 32,…

function getModulo($n, $d)

{

return ( $n & ($d - 1) );

}     

  
// Код драйвера

$n = 6;

  
// d должно быть степенью 2

$d = 4; 

echo $n ," moduo"," ", $d, " is "

         " ",getModulo($n, $d);

      
// Этот код предоставлен vt_m.
?>

Ссылки:
http://graphics.stanford.edu/~seander/bithacks.html#ModulusDivisionEasy

Пожалуйста, пишите комментарии, если вы обнаружите какую-либо ошибку в вышеуказанной программе / алгоритме или другие способы решения той же проблемы.

Рекомендуемые посты:

Вычислить деление модуля на степень числа 2

0.00 (0%) 0 votes