Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • DSA
  • Practice Mathematical Algorithm
  • Mathematical Algorithms
  • Pythagorean Triplet
  • Fibonacci Number
  • Euclidean Algorithm
  • LCM of Array
  • GCD of Array
  • Binomial Coefficient
  • Catalan Numbers
  • Sieve of Eratosthenes
  • Euler Totient Function
  • Modular Exponentiation
  • Modular Multiplicative Inverse
  • Stein's Algorithm
  • Juggler Sequence
  • Chinese Remainder Theorem
  • Quiz on Fibonacci Numbers
Open In App
Next Article:
Modulus on Negative Numbers
Next article icon

Modular Division

Last Updated : 20 Jan, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

Modular division is the process of dividing one number by another in modular arithmetic. In modular arithmetic, division is defined differently from regular arithmetic because there is no direct “division” operation. Instead, modular division involves multiplying by the modular multiplicative inverse of the divisor under a given modulus.

Given integers a, b, and m, the modular division a/b (mod  m) is computed as:

a/b (mod  m) = a · b-1 (mod m)

where b−1 is the modular multiplicative inverse of b under modulus m, satisfying:

b ⋅ b−1 (mod  m) = 1

Examples: 

Input  : a  = 8, b = 4, m = 5 Output : 2  Input  : a  = 8, b = 3, m = 5 Output : 1 Note that (1*3)%5 is same as 8%5  Input  : a  = 11, b = 4, m = 5 Output : 4 Note that (4*4)%5 is same as 11%5

The following articles are prerequisites for this.

  • Modular multiplicative inverse 
  • Extended Euclidean algorithms

Can we always do modular division?

The answer is “NO”. First of all, like ordinary arithmetic, division by 0 is not defined. For example, 4/0 is not allowed. In modular arithmetic, not only 4/0 is not allowed, but 4/12 under modulo 6 is also not allowed. The reason is, 12 is congruent to 0 when modulus is 6.

When is modular division defined? 

Modular division is defined when the modular inverse of the divisor exists. The inverse of an integer ‘x’ is another integer ‘y’ such that (x*y) % m = 1 where m is the modulus. 

When does inverse exist?

As we discussed, inverse a number ‘a’ exists under modulo ‘m’ if ‘a’ and ‘m’ are co-prime, i.e., GCD of them is 1.

How to find modular division? 

The task is to compute a/b under modulo m. 1) First check if inverse of b under modulo m exists or not.      a) If inverse doesn't exists (GCD of b and m is not 1),            print "Division not defined"     b) Else return  "(inverse * a) % m" 
C++
// C++ program to do modular division #include<iostream> using namespace std;  // C++ function for extended Euclidean Algorithm int gcdExtended(int a, int b, int *x, int *y);  // Function to find modulo inverse of b. It returns // -1 when inverse doesn't int modInverse(int b, int m) {     int x, y; // used in extended GCD algorithm     int g = gcdExtended(b, m, &x, &y);      // Return -1 if b and m are not co-prime     if (g != 1)         return -1;      // m is added to handle negative x     return (x%m + m) % m; }  // Function to compute a/b under modulo m void modDivide(int a, int b, int m) {     a = a % m;     int inv = modInverse(b, m);     if (inv == -1)        cout << "Division not defined";     else        cout << "Result of division is " << (inv * a) % m; }  // C function for extended Euclidean Algorithm (used to // find modular inverse. int gcdExtended(int a, int b, int *x, int *y) {     // Base Case     if (a == 0)     {         *x = 0, *y = 1;         return b;     }      int x1, y1; // To store results of recursive call     int gcd = gcdExtended(b%a, a, &x1, &y1);      // Update x and y using results of recursive     // call     *x = y1 - (b/a) * x1;     *y = x1;      return gcd; }  // Driver Program int main() {     int  a  = 8, b = 3, m = 5;     modDivide(a, b, m);     return 0; }  //this code is contributed by khushboogoyal499 
C
// C program to do modular division #include <stdio.h>  // C function for extended Euclidean Algorithm int gcdExtended(int a, int b, int *x, int *y);  // Function to find modulo inverse of b. It returns // -1 when inverse doesn't int modInverse(int b, int m) {     int x, y; // used in extended GCD algorithm     int g = gcdExtended(b, m, &x, &y);      // Return -1 if b and m are not co-prime     if (g != 1)         return -1;      // m is added to handle negative x     return (x%m + m) % m; }  // Function to compute a/b under modulo m void modDivide(int a, int b, int m) {     a = a % m;     int inv = modInverse(b, m);     if (inv == -1)      printf ("Division not defined");     else     {       int c = (inv * a) % m ;        printf ("Result of division is %d", c) ;     } }  // C function for extended Euclidean Algorithm (used to // find modular inverse. int gcdExtended(int a, int b, int *x, int *y) {     // Base Case     if (a == 0)     {         *x = 0, *y = 1;         return b;     }      int x1, y1; // To store results of recursive call     int gcd = gcdExtended(b%a, a, &x1, &y1);      // Update x and y using results of recursive     // call     *x = y1 - (b/a) * x1;     *y = x1;      return gcd; }  // Driver Program int main() {     int  a  = 8, b = 3, m = 5;     modDivide(a, b, m);     return 0; } 
Java
// java program to do modular division  import java.io.*; import java.lang.Math;  public class GFG {      static int gcd(int a,int b){         if (b == 0){             return a;         }                  return gcd(b, a % b);     }          // Function to find modulo inverse of b. It returns      // -1 when inverse doesn't      // modInverse works for prime m     static int modInverse(int b,int m){         int g = gcd(b, m) ;         if (g != 1)             return -1;         else         {             //If b and m are relatively prime,              //then modulo inverse is b^(m-2) mode m              return (int)Math.pow(b, m - 2) % m;         }     }          // Function to compute a/b under modulo m      static void modDivide(int a,int b,int m){         a = a % m;         int inv = modInverse(b,m);         if(inv == -1){             System.out.println("Division not defined");         }            else{              System.out.println("Result of Division is " + ((inv*a) % m));         }     }            // Driver Program      public static void main(String[] args) {         int a = 8;         int b = 3;         int m = 5;         modDivide(a, b, m);     } }  // The code is contributed by Gautam goel (gautamgoel962) 
Python
# Python3 program to do modular division import math  # Function to find modulo inverse of b. It returns  # -1 when inverse doesn't  # modInverse works for prime m def modInverse(b,m):     g = math.gcd(b, m)      if (g != 1):         # print("Inverse doesn't exist")          return -1     else:          # If b and m are relatively prime,          # then modulo inverse is b^(m-2) mode m          return pow(b, m - 2, m)   # Function to compute a/b under modulo m  def modDivide(a,b,m):     a = a % m     inv = modInverse(b,m)     if(inv == -1):         print("Division not defined")     else:         print("Result of Division is ",(inv*a) % m)  # Driver Program  a = 8 b = 3 m = 5 modDivide(a, b, m)  # This code is Contributed by HarendraSingh22 
C#
using System;  // C# program to do modular division class GFG {    // Recursive Function  to find   // GCD of two numbers   static int gcd(int a,int b){     if (b == 0){       return a;     }              return gcd(b, a % b);   }    // Function to find modulo inverse of b. It returns    // -1 when inverse doesn't    // modInverse works for prime m   static int modInverse(int b,int m){     int g = gcd(b, m) ;     if (g != 1){       return -1;     }             else     {        //If b and m are relatively prime,        //then modulo inverse is b^(m-2) mode m        return (int)Math.Pow(b, m - 2) % m;     }   }    // Function to compute a/b under modulo m    static void modDivide(int a,int b,int m){     a = a % m;     int inv = modInverse(b,m);     if(inv == -1){       Console.WriteLine("Division not defined");     }        else{       Console.WriteLine("Result of Division is " + ((inv*a) % m));     }   }      // Driver Code    static void Main() {     int a = 8;     int b = 3;     int m = 5;     modDivide(a, b, m);   } }  // The code is contributed by Gautam goel (gautamgoel962) 
JavaScript
<script> // JS program to do modular division function gcd(a, b) {     if (b == 0)         return a;     return gcd(b, a % b); }  // Function to find modulo inverse of b. It returns  // -1 when inverse doesn't  // modInverse works for prime m function modInverse(b,m) {     g = gcd(b, m) ;     if (g != 1)         return -1;     else     {         //If b and m are relatively prime,          //then modulo inverse is b^(m-2) mode m          return Math.pow(b, m - 2, m);     } }  // Function to compute a/b under modulo m  function modDivide(a,b,m) {     a = a % m;     inv = modInverse(b,m);     if(inv == -1)         document.write("Division not defined");     else         document.write("Result of Division is ",(inv*a) % m); }  // Driver Program  a = 8; b = 3; m = 5; modDivide(a, b, m);  // This code is Contributed by phasing17 </script> 
PHP
<?php // PHP program to do modular division  // Function to find modulo inverse of b.  // It returns -1 when inverse doesn't function modInverse($b, $m) {     $x = 0;     $y = 0; // used in extended GCD algorithm     $g = gcdExtended($b, $m, $x, $y);      // Return -1 if b and m are not co-prime     if ($g != 1)         return -1;      // m is added to handle negative x     return ($x % $m + $m) % $m; }  // Function to compute a/b under modulo m function modDivide($a, $b, $m) {     $a = $a % $m;     $inv = modInverse($b, $m);     if ($inv == -1)         echo "Division not defined";     else         echo "Result of division is " .                        ($inv * $a) % $m; }  // function for extended Euclidean Algorithm  // (used to find modular inverse. function gcdExtended($a, $b, &$x, &$y) {     // Base Case     if ($a == 0)     {         $x = 0;         $y = 1;         return $b;     }      $x1 = 0;     $y1 = 0; // To store results of recursive call     $gcd = gcdExtended($b % $a, $a, $x1, $y1);      // Update x and y using results of      // recursive call     $x = $y1 - (int)($b / $a) * $x1;     $y = $x1;      return $gcd; }  // Driver Code $a = 8; $b = 3; $m = 5; modDivide($a, $b, $m);  // This code is contributed by mits  ?> 

Output: 

Result of division is 1


Modular division is different from addition, subtraction and multiplication. 
One difference is division doesn’t always exist (as discussed above). Following is another difference. 
 

Below equations are valid (a * b) % m = ((a % m) * (b % m)) % m (a + b) % m = ((a % m) + (b % m)) % m  // m is added to handle negative numbers (a - b + m) % m = ((a % m) - (b % m) + m) % m   But,  (a / b) % m may NOT be same as ((a % m)/(b % m)) % m  For example, a = 10, b = 5, m = 5.     (a / b) % m is 2, but ((a % m) / (b % m)) % m                            is not defined.
 


Next Article
Modulus on Negative Numbers

D

Dheeraj Gupta
Improve
Article Tags :
  • DSA
  • Mathematical
  • Modular Arithmetic
Practice Tags :
  • Mathematical
  • Modular Arithmetic

Similar Reads

  • Modular Arithmetic
    Modular arithmetic is a system of arithmetic for numbers where numbers "wrap around" after reaching a certain value, called the modulus. It mainly uses remainders to get the value after wrap around. It is often referred to as "clock arithmetic. As you can see, the time values wrap after reaching 12
    10 min read
  • Modular Exponentiation (Power in Modular Arithmetic)
    Modular Exponentiation is the process of computing: xy (mod  p). where x, y, and p are integers. It efficiently calculates the remainder when xy is divided by p or (xy) % p, even for very large y. Examples : Input: x = 2, y = 3, p = 5Output: 3Explanation: 2^3 % 5 = 8 % 5 = 3.Input: x = 2, y = 5, p =
    8 min read
  • Modular multiplicative inverse
    Given two integers A and M, find the modular multiplicative inverse of A under modulo M.The modular multiplicative inverse is an integer X such that: A * X ≡ 1 (mod M) Note: The value of X should be in the range {1, 2, ... M-1}, i.e., in the range of integer modulo M. ( Note that X cannot be 0 as A*
    15+ min read
  • Multiplicative order
    In number theory, given an integer A and a positive integer N with gcd( A , N) = 1, the multiplicative order of a modulo N is the smallest positive integer k with A^k( mod N ) = 1. ( 0 < K < N ) Examples : Input : A = 4 , N = 7 Output : 3 explanation : GCD(4, 7) = 1 A^k( mod N ) = 1 ( smallest
    7 min read
  • Modular Multiplication
    Modular arithmetic, or clock arithmetic, is a system of arithmetic for integers, where numbers "wrap around" upon reaching a certain value This mathematical concept is widely used in various fields such as computer science, cryptography, number theory, and even everyday situations like clock time ca
    6 min read
  • Modular Division
    Modular division is the process of dividing one number by another in modular arithmetic. In modular arithmetic, division is defined differently from regular arithmetic because there is no direct "division" operation. Instead, modular division involves multiplying by the modular multiplicative invers
    10 min read
  • Modulus on Negative Numbers
    The modulus operator, denoted as %, returns the remainder when one number (the dividend) is divided by another number (the divisor). Modulus of Positive NumbersProblem: What is 7 mod 5?Solution: From Quotient Remainder Theorem, Dividend=Divisor*Quotient + Remainder7 = 5*1 + 2, which gives 2 as the r
    7 min read
  • Problems on Modular Arithmetic

    • Euler's criterion (Check if square root under modulo p exists)
      Given a number 'n' and a prime p, find if square root of n under modulo p exists or not. A number x is square root of n under modulo p if (x*x)%p = n%p. Examples : Input: n = 2, p = 5 Output: false There doesn't exist a number x such that (x*x)%5 is 2 Input: n = 2, p = 7 Output: true There exists a
      11 min read

    • Find sum of modulo K of first N natural number
      Given two integer N ans K, the task is to find sum of modulo K of first N natural numbers i.e 1%K + 2%K + ..... + N%K. Examples : Input : N = 10 and K = 2. Output : 5 Sum = 1%2 + 2%2 + 3%2 + 4%2 + 5%2 + 6%2 + 7%2 + 8%2 + 9%2 + 10%2 = 1 + 0 + 1 + 0 + 1 + 0 + 1 + 0 + 1 + 0 = 5.Recommended PracticeReve
      9 min read

    • How to compute mod of a big number?
      Given a big number 'num' represented as string and an integer x, find value of "num % a" or "num mod a". Output is expected as an integer. Examples : Input: num = "12316767678678", a = 10 Output: num (mod a) ? 8 The idea is to process all digits one by one and use the property that xy (mod a) ? ((x
      4 min read

    • Exponential Squaring (Fast Modulo Multiplication)
      Given two numbers base and exp, we need to compute baseexp under Modulo 10^9+7 Examples: Input : base = 2, exp = 2Output : 4Input : base = 5, exp = 100000Output : 754573817In competitions, for calculating large powers of a number we are given a modulus value(a large prime number) because as the valu
      12 min read

    • Trick for modular division ( (x1 * x2 .... xn) / b ) mod (m)
      Given integers x1, x2, x3......xn, b, and m, we are supposed to find the result of ((x1*x2....xn)/b)mod(m). Example 1: Suppose that we are required to find (55C5)%(1000000007) i.e ((55*54*53*52*51)/120)%1000000007 Naive Method : Simply calculate the product (55*54*53*52*51)= say x,Divide x by 120 an
      9 min read

    • Modular Multiplication
      Modular arithmetic, or clock arithmetic, is a system of arithmetic for integers, where numbers "wrap around" upon reaching a certain value This mathematical concept is widely used in various fields such as computer science, cryptography, number theory, and even everyday situations like clock time ca
      6 min read

    • Difference between Modulo and Modulus
      In the world of Programming and Mathematics we often encounter the two terms "Modulo" and "Modulus". In programming we use the operator "%" to perform modulo of two numbers. It basically finds the remainder when a number x is divided by another number N. It is denoted by : x mod N where x : Dividend
      2 min read

    • Modulo Operations in Programming With Negative Results
      In programming, the modulo operation gives the remainder or signed remainder of a division, after one integer is divided by another integer. It is one of the most used operators in programming. This article discusses when and why the modulo operation yields a negative result. Examples: In C, 3 % 2 r
      15+ min read

    • Modulo 10^9+7 (1000000007)
      In most programming competitions, we are required to answer the result in 10^9+7 modulo. The reason behind this is, if problem constraints are large integers, only efficient algorithms can solve them in an allowed limited time.What is modulo operation: The remainder obtained after the division opera
      10 min read

    • Fibonacci modulo p
      The Fibonacci sequence is defined as [Tex]F_i [/Tex]= [Tex]F_{i-1} [/Tex]+ [Tex]F_{i-2} [/Tex]where [Tex]F_1 [/Tex]= 1 and [Tex]F_2 [/Tex]= 1 are the seeds. For a given prime number p, consider a new sequence which is (Fibonacci sequence) mod p. For example for p = 5, the new sequence would be 1, 1,
      5 min read

    • Modulo of a large Binary String
      Given a large binary string str and an integer K, the task is to find the value of str % K.Examples: Input: str = "1101", K = 45 Output: 13 decimal(1101) % 45 = 13 % 45 = 13 Input: str = "11010101", K = 112 Output: 101 decimal(11010101) % 112 = 213 % 112 = 101 Approach: It is known that (str % K) wh
      5 min read

    • Modular multiplicative inverse from 1 to n
      Give a positive integer n, find modular multiplicative inverse of all integer from 1 to n with respect to a big prime number, say, 'prime'. The modular multiplicative inverse of a is an integer 'x' such that. a x ? 1 (mod prime) Examples: Input : n = 10, prime = 17 Output : 1 9 6 13 7 3 5 15 2 12 Ex
      9 min read

    • Modular exponentiation (Recursive)
      Given three numbers a, b and c, we need to find (ab) % cNow why do “% c” after exponentiation, because ab will be really large even for relatively small values of a, b and that is a problem because the data type of the language that we try to code the problem, will most probably not let us store suc
      6 min read

    Chinese Remainder Theorem

    • Introduction to Chinese Remainder Theorem
      We are given two arrays num[0..k-1] and rem[0..k-1]. In num[0..k-1], every pair is coprime (gcd for every pair is 1). We need to find minimum positive number x such that: x % num[0] = rem[0], x % num[1] = rem[1], .......................x % num[k-1] = rem[k-1] Basically, we are given k numbers which
      7 min read

    • Implementation of Chinese Remainder theorem (Inverse Modulo based implementation)
      We are given two arrays num[0..k-1] and rem[0..k-1]. In num[0..k-1], every pair is coprime (gcd for every pair is 1). We need to find minimum positive number x such that: x % num[0] = rem[0], x % num[1] = rem[1], ....................... x % num[k-1] = rem[k-1] Example: Input: num[] = {3, 4, 5}, rem[
      11 min read

    • Cyclic Redundancy Check and Modulo-2 Division
      Cyclic Redundancy Check or CRC is a method of detecting accidental changes/errors in the communication channel. CRC uses Generator Polynomial which is available on both sender and receiver side. An example generator polynomial is of the form like x3 + x + 1. This generator polynomial represents key
      15+ min read

    • Using Chinese Remainder Theorem to Combine Modular equations
      Given N modular equations: A ? x1mod(m1) . . A ? xnmod(mn) Find x in the equation A ? xmod(m1*m2*m3..*mn) where mi is prime, or a power of a prime, and i takes values from 1 to n. The input is given as two arrays, the first being an array containing values of each xi, and the second array containing
      12 min read

geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences