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; ` `} ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## Python 3

`# A method to multiply two numbers ` `# using Russian Peasant method ` ` ` `# Function to multiply two numbers ` `# using Russian Peasant method ` `def` `russianPeasant(a, b): ` ` ` ` ` `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 ` `print` `(russianPeasant(` `18` `, ` `1` `)) ` `print` `(russianPeasant(` `20` `, ` `12` `)) ` `# This code is contributed by ` `# Smitha Dinesh Semwal ` |

*chevron_right*

*filter_none*

## C#

`// C# program for Russian Peasant Multiplication ` `using` `System; ` ` ` `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() ` ` ` `{ ` ` ` `Console.WriteLine(russianPeasant(18, 1)); ` ` ` `Console.WriteLine(russianPeasant(20, 12)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Sam007. ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP Code to multiply two numbers ` `// using Russian Peasant method ` ` ` `// function returns the result ` `function` `russianPeasant(` `$a` `, ` `$b` `) ` `{ ` ` ` ` ` `// initialize result ` ` ` `$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) ` ` ` `$res` `= ` `$res` `+ ` `$a` `; ` ` ` ` ` `// Double the first number and ` ` ` `// halve the second number ` ` ` `$a` `= ` `$a` `<< 1; ` ` ` `$b` `= ` `$b` `>> 1; ` ` ` `} ` ` ` `return` `$res` `; ` `} ` ` ` ` ` `// Driver Code ` ` ` `echo` `russianPeasant(18, 1), ` `"\n"` `; ` ` ` `echo` `russianPeasant(20, 12), ` `"\n"` `; ` ` ` `// This code is contributed by Ajit ` `?> ` |

*chevron_right*

*filter_none*

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.

**Reference:**

http://mathforum.org/dr.math/faq/faq.peasant.html

This article is compiled by **Shalki Agarwal**. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Multiply two integers without using multiplication, division and bitwise operators, and no loops
- Multiply a number by 15 without using * and / operators
- Multiply any Number with 4 using Bitwise Operator
- Bitwise Operators in C/C++
- Check if a Number is Odd or Even using Bitwise Operators
- What are the differences between bitwise and logical AND operators in C/C++?
- Bitwise right shift operators in Java
- Toggle case of a string using Bitwise Operators
- Check if a number is multiple of 9 using bitwise operators
- Check if a number is divisible by 8 using bitwise operators
- Check if a number is divisible by 17 using bitwise operators
- Case conversion (Lower to Upper and Vice Versa) of a string using BitWise operators in C/C++
- Multiply N complex numbers given as strings
- Multiply Large Numbers using Grid Method
- Multiply Large Numbers represented as Strings
- Bitwise AND of all the odd numbers from 1 to N
- Total pairs in an array such that the bitwise AND, bitwise OR and bitwise XOR of LSB is 1
- Add two numbers without using arithmetic operators
- Check whether bitwise OR of N numbers is Even or Odd
- Numbers whose bitwise OR and sum with N are equal