# Russian Peasant (Multiply two numbers using bitwise operators)

Given two integers, write a function to multiply them without using multiplication operator.

There are many other ways to multiply two numbers (For example, see this). One interesting method is the Russian peasant algorithm. The idea is to double the first number and halve the second number repeatedly till the second number doesn’t become 1. In the process, whenever the second number become odd, we add the first number to result (result is initialized as 0)
The following is simple algorithm.

```Let the two given numbers be 'a' and 'b'
1) Initialize result 'res' as 0.
2) Do following while 'b' is greater than 0
a) If 'b' is odd, add 'a' to 'res'
b) Double 'a' and halve 'b'
3) Return 'res'. ```

## C/C++

```#include <iostream>
using namespace std;

// A method to multiply two numbers using Russian Peasant method
unsigned int russianPeasant(unsigned int a, unsigned int b)
{
int res = 0;  // initialize result

// While second number doesn't become 1
while (b > 0)
{
// If second number becomes odd, add the first number to result
if (b & 1)
res = res + a;

// Double the first number and halve the second number
a = a << 1;
b = b >> 1;
}
return res;
}

// Driver program to test above function
int main()
{
cout << russianPeasant(18, 1) << endl;
cout << russianPeasant(20, 12) << endl;
return 0;
}
```

## Java

```// Java program for Russian Peasant Multiplication
import java.io.*;

class GFG
{
// Function to multiply two
// numbers using Russian Peasant method
static int russianPeasant(int a, int b)
{
// initialize result
int res = 0;

// While second number doesn't become 1
while (b > 0)
{
// If second number becomes odd,
// add the first number to result
if ((b & 1) != 0)
res = res + a;

// Double the first number
// and halve the second number
a = a << 1;
b = b >> 1;
}
return res;
}

// driver program
public static void main (String[] args)
{
System.out.println(russianPeasant(18, 1));
System.out.println(russianPeasant(20, 12));
}
}

// Contributed by Pramod Kumar
```

Output:
```18
240```

How does this work?
The value of a*b is same as (a*2)*(b/2) if b is even, otherwise the value is same as ((a*2)*(b/2) + a). In the while loop, we keep multiplying ‘a’ with 2 and keep dividing ‘b’ by 2. If ‘b’ becomes odd in loop, we add ‘a’ to ‘res’. When value of ‘b’ becomes 1, the value of ‘res’ + ‘a’, gives us the result.
Note that when ‘b’ is a power of 2, the ‘res’ would remain 0 and ‘a’ would have the multiplication. See the reference for more information.

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2.4 Average Difficulty : 2.4/5.0
Based on 17 vote(s)