Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • 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
  • 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:
GFact | 2x + 1(where x > 0) is prime if and only if x is a power of 2
Next article icon

Sum of divisors of factorial of a number

Last Updated : 13 Sep, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a number n, we need to calculate the sum of divisors of factorial of the number.

Examples: 

Input : 4 Output : 60 Factorial of 4 is 24. Divisors of 24 are 1 2 3 4 6 8 12 24, sum of these is 60.  Input : 6 Output : 2418

A Simple Solution is to first compute the factorial of the given number, then count the number divisors of the factorial. This solution is not efficient and may cause overflow due to factorial computation.

Below is the implementation of the above approach:  

C++
// C++ program to find sum of proper divisor of  // factorial of a number  #include <bits/stdc++.h> using namespace std;  // function to calculate factorial  int fact(int n) {     if (n == 0)         return 1;     return n * fact(n - 1); }  // function to calculate sum of divisor  int div(int x) {     int ans = 0;     for (int i = 1; i<= x; i++)         if (x % i == 0)             ans += i;     return ans; }  // Returns sum of divisors of n!  int sumFactDiv(int n) {     return div(fact(n)); }  // Driver Code int main() {     int n = 4;     cout << sumFactDiv(n); }  // This code is contributed  // by Akanksha Rai 
C
// C program to find sum of proper divisor of  // factorial of a number  #include <stdio.h> // function to calculate factorial   int fact(int n) {     if (n == 0)         return 1;     return n * fact(n - 1); }  // function to calculate sum of divisor   int div(int x) {     int ans = 0;     for (int i = 1; i<= x; i++)         if (x % i == 0)             ans += i;     return ans; }  // Returns sum of divisors of n!   int sumFactDiv(int n) {     return div(fact(n)); }  // driver program   int main() {     int n = 4;     printf("%d",sumFactDiv(n)); } 
Java
// Java program to find sum of proper divisor of // factorial of a number import java.io.*; import java.util.*;  public class Division {     // function to calculate factorial     static int fact(int n)     {         if (n == 0)             return 1;         return n*fact(n-1);     }      // function to calculate sum of divisor     static int div(int x)     {         int ans = 0;         for (int i = 1; i<= x; i++)             if (x%i == 0)                 ans += i;         return ans;     }      // Returns sum of divisors of n!     static int sumFactDiv(int n)     {         return div(fact(n));     }      // driver program     public static void main(String args[])     {         int n = 4;         System.out.println(sumFactDiv(n));     } }  
Python3
# Python 3 program to find sum of proper  # divisor of factorial of a number   # function to calculate factorial  def fact(n):          if (n == 0):         return 1     return n * fact(n - 1)  # function to calculate sum  # of divisor  def div(x):     ans = 0;     for i in range(1, x + 1):         if (x % i == 0):             ans += i     return ans  # Returns sum of divisors of n!  def sumFactDiv(n):     return div(fact(n))  # Driver Code n = 4 print(sumFactDiv(n))  # This code is contributed # by Rajput-Ji 
C#
// C# program to find sum of proper  // divisor of factorial of a number using System; class Division {          // function to calculate factorial     static int fac(int n)     {         if (n == 0)             return 1;         return n * fac(n - 1);     }      // function to calculate     // sum of divisor     static int div(int x)     {         int ans = 0;         for (int i = 1; i <= x; i++)             if (x % i == 0)                 ans += i;         return ans;     }      // Returns sum of divisors of n!     static int sumFactDiv(int n)     {         return div(fac(n));     }      // Driver Code     public static void Main()     {         int n = 4;         Console.Write(sumFactDiv(n));     } }   // This code is contributed by Nitin Mittal. 
PHP
<?php // PHP program to find sum of proper  // divisor of factorial of a number   // function to calculate factorial  function fact($n) {     if ($n == 0)         return 1;     return $n * fact($n - 1); }  // function to calculate sum of divisor  function div($x) {     $ans = 0;     for ($i = 1; $i<= $x; $i++)         if ($x % $i == 0)             $ans += $i;     return $ans; }  // Returns sum of divisors of n!  function sumFactDiv($n) {     return div(fact($n)); }  // Driver Code $n = 4; echo sumFactDiv($n);  // This code is contributed  // by Akanksha Rai ?> 
JavaScript
<script> // JavaScript program to find // sum of proper divisor of // factorial of a number  // function to calculate factorial function fact(n) {     if (n == 0)         return 1;     return n * fact(n - 1); }  // function to calculate sum of divisor function div(x) {     let ans = 0;     for (let i = 1; i<= x; i++)         if (x % i == 0)             ans += i;     return ans; }  // Returns sum of divisors of n! function sumFactDiv(n) {     return div(fact(n)); }  // Driver Code      let n = 4;     document.write(sumFactDiv(n));   // This code is contributed by Surbhi Tyagi.  </script> 

Output : 

60

Time Complexity: O(n!)

Auxiliary Space: O(1)


An efficient solution is based on Legendre’s formula. Below are the steps. 

  1. Find all prime numbers less than or equal to n (input number). We can use Sieve Algorithm for this. Let n be 6. All prime numbers less than 6 are {2, 3, 5}.
  2. For each prime number, p find the largest power of it that divides n!. We use Legendre’s formula for this purpose.
    • The largest power of 2 that divides 6!, exp1 = 4.
    • The largest power of 3 that divides 6!, exp2 = 2.
    • The largest power of 5 that divides 6!, exp3 = 1.
  3. The result is based on the Divisor Function. 
C++
// C++ program to find sum of divisors in n! #include<bits/stdc++.h> #include<math.h> using namespace std;  // allPrimes[] stores all prime numbers less // than or equal to n. vector<int> allPrimes;  // Fills above vector allPrimes[] for a given n void sieve(int n) {     // Create a boolean array "prime[0..n]" and     // initialize all entries it as true. A value     // in prime[i] will finally be false if i is     // not a prime, else true.     vector<bool> prime(n+1, true);      // Loop to update prime[]     for (int p = 2; p*p <= n; p++)     {         // If prime[p] is not changed, then it         // is a prime         if (prime[p] == true)         {             // Update all multiples of p             for (int i = p*2; i <= n; i += p)                 prime[i] = false;         }     }      // Store primes in the vector allPrimes     for (int p = 2; p <= n; p++)         if (prime[p])             allPrimes.push_back(p); }  // Function to find all result of factorial number int factorialDivisors(int n) {     sieve(n);  // create sieve      // Initialize result     int result = 1;      // find exponents of all primes which divides n     // and less than n     for (int i = 0; i < allPrimes.size(); i++)     {         // Current divisor         int p = allPrimes[i];          // Find the highest power (stored in exp)'         // of allPrimes[i] that divides n using         // Legendre's formula.         int exp = 0;         while (p <= n)         {             exp = exp + (n/p);             p = p*allPrimes[i];         }          // Using the divisor function to calculate         // the sum         result = result*(pow(allPrimes[i], exp+1)-1)/                                     (allPrimes[i]-1);     }      // return total divisors     return result; }  // Driver program to run the cases int main() {     cout << factorialDivisors(4);     return 0; } 
Java
// Java program to find sum of divisors in n!  import java.util.*;  class GFG{ // allPrimes[] stores all prime numbers less  // than or equal to n.  static ArrayList<Integer> allPrimes=new ArrayList<Integer>();   // Fills above vector allPrimes[] for a given n  static void sieve(int n)  {      // Create a boolean array "prime[0..n]" and      // initialize all entries it as true. A value      // in prime[i] will finally be false if i is      // not a prime, else true.      boolean[] prime=new boolean[n+1];       // Loop to update prime[]      for (int p = 2; p*p <= n; p++)      {          // If prime[p] is not changed, then it          // is a prime          if (prime[p] == false)          {              // Update all multiples of p              for (int i = p*2; i <= n; i += p)                  prime[i] = true;          }      }       // Store primes in the vector allPrimes      for (int p = 2; p <= n; p++)          if (prime[p]==false)              allPrimes.add(p);  }   // Function to find all result of factorial number  static int factorialDivisors(int n)  {      sieve(n); // create sieve       // Initialize result      int result = 1;       // find exponents of all primes which divides n      // and less than n      for (int i = 0; i < allPrimes.size(); i++)      {          // Current divisor          int p = allPrimes.get(i);           // Find the highest power (stored in exp)'          // of allPrimes[i] that divides n using          // Legendre's formula.          int exp = 0;          while (p <= n)          {              exp = exp + (n/p);              p = p*allPrimes.get(i);          }           // Using the divisor function to calculate          // the sum          result = result*((int)Math.pow(allPrimes.get(i), exp+1)-1)/                                      (allPrimes.get(i)-1);      }       // return total divisors      return result;  }   // Driver program to run the cases  public static void main(String[] args)  {      System.out.println(factorialDivisors(4));  }  } // This code is contributed by mits 
Python3
# Python3 program to find sum of divisors in n!   # allPrimes[] stores all prime numbers  # less than or equal to n.  allPrimes = [];   # Fills above vector allPrimes[] # for a given n  def sieve(n):       # Create a boolean array "prime[0..n]"      # and initialize all entries it as true.      # A value in prime[i] will finally be      # false if i is not a prime, else true.      prime = [True] * (n + 1);       # Loop to update prime[]     p = 2;     while (p * p <= n):                   # If prime[p] is not changed,          # then it is a prime          if (prime[p] == True):                           # Update all multiples of p              for i in range(p * 2, n + 1, p):                  prime[i] = False;          p += 1;       # Store primes in the vector allPrimes      for p in range(2, n + 1):          if (prime[p]):              allPrimes.append(p);   # Function to find all result of factorial number  def factorialDivisors(n):       sieve(n); # create sieve       # Initialize result      result = 1;       # find exponents of all primes which      # divides n and less than n      for i in range(len(allPrimes)):                   # Current divisor          p = allPrimes[i];           # Find the highest power (stored in exp)'          # of allPrimes[i] that divides n using          # Legendre's formula.          exp = 0;          while (p <= n):             exp = exp + int(n / p);              p = p * allPrimes[i];           # Using the divisor function to           # calculate the sum          result = int(result * (pow(allPrimes[i], exp + 1) - 1) /                                             (allPrimes[i] - 1));       # return total divisors      return result;   # Driver Code print(factorialDivisors(4));  # This code is contributed by mits 
C#
// C# program to find sum of divisors in n!  using System; using System.Collections;  class GFG{ // allPrimes[] stores all prime numbers less  // than or equal to n.  static ArrayList allPrimes=new ArrayList();   // Fills above vector allPrimes[] for a given n  static void sieve(int n)  {      // Create a boolean array "prime[0..n]" and      // initialize all entries it as true. A value      // in prime[i] will finally be false if i is      // not a prime, else true.      bool[] prime=new bool[n+1];       // Loop to update prime[]      for (int p = 2; p*p <= n; p++)      {          // If prime[p] is not changed, then it          // is a prime          if (prime[p] == false)          {              // Update all multiples of p              for (int i = p*2; i <= n; i += p)                  prime[i] = true;          }      }       // Store primes in the vector allPrimes      for (int p = 2; p <= n; p++)          if (prime[p]==false)              allPrimes.Add(p);  }   // Function to find all result of factorial number  static int factorialDivisors(int n)  {      sieve(n); // create sieve       // Initialize result      int result = 1;       // find exponents of all primes which divides n      // and less than n      for (int i = 0; i < allPrimes.Count; i++)      {          // Current divisor          int p = (int)allPrimes[i];           // Find the highest power (stored in exp)'          // of allPrimes[i] that divides n using          // Legendre's formula.          int exp = 0;          while (p <= n)          {              exp = exp + (n/p);              p = p*(int)allPrimes[i];          }           // Using the divisor function to calculate          // the sum          result = result*((int)Math.Pow((int)allPrimes[i], exp+1)-1)/                                      ((int)allPrimes[i]-1);      }       // return total divisors      return result;  }   // Driver program to run the cases  static void Main()  {      Console.WriteLine(factorialDivisors(4));  }  } // This code is contributed by mits 
PHP
<?php // PHP program to find sum of divisors in n!   // allPrimes[] stores all prime numbers less  // than or equal to n.  $allPrimes=array();   // Fills above vector allPrimes[] for a given n  function sieve($n)  {     global $allPrimes;     // Create a boolean array "prime[0..n]" and      // initialize all entries it as true. A value      // in prime[i] will finally be false if i is      // not a prime, else true.      $prime=array_fill(0,$n+1,true);       // Loop to update prime[]      for ($p = 2; $p*$p <= $n; $p++)      {          // If prime[p] is not changed, then it          // is a prime          if ($prime[$p] == true)          {              // Update all multiples of p              for ($i = $p*2; $i <= $n; $i += $p)                  $prime[$i] = false;          }      }       // Store primes in the vector allPrimes      for ($p = 2; $p <= $n; $p++)          if ($prime[$p])              array_push($allPrimes,$p);  }   // Function to find all result of factorial number  function factorialDivisors($n)  {     global $allPrimes;     sieve($n); // create sieve       // Initialize result      $result = 1;       // find exponents of all primes which divides n      // and less than n      for ($i = 0; $i < count($allPrimes); $i++)      {          // Current divisor          $p = $allPrimes[$i];           // Find the highest power (stored in exp)'          // of allPrimes[i] that divides n using          // Legendre's formula.          $exp = 0;          while ($p <= $n)          {              $exp = $exp + (int)($n/$p);              $p = $p*$allPrimes[$i];          }           // Using the divisor function to calculate          // the sum          $result = $result*(pow($allPrimes[$i], $exp+1)-1)/                                      ($allPrimes[$i]-1);      }       // return total divisors      return $result;  }   // Driver program to run the cases       print(factorialDivisors(4));   // This code is contributed by mits ?> 
JavaScript
<script>  // Javascript program to find sum of divisors in n!  // allPrimes[] stores all prime numbers less // than or equal to n. let allPrimes=[];  // Fills above vector allPrimes[] for a given n function sieve(n) {          // Create a boolean array "prime[0..n]" and     // initialize all entries it as true. A value     // in prime[i] will finally be false if i is     // not a prime, else true.     let prime = new Array(n + 1);     for(let i = 0; i < n + 1; i++)         prime[i] = true;       // Loop to update prime[]     for(let p = 2; p * p <= n; p++)     {                  // If prime[p] is not changed, then it         // is a prime         if (prime[p] == true)         {                          // Update all multiples of p             for(let i = p * 2; i <= n; i += p)                 prime[i] = false;         }     }       // Store primes in the vector allPrimes     for(let p = 2; p <= n; p++)         if (prime[p])             allPrimes.push(p); }  // Function to find all result of // factorial number function factorialDivisors(    n) {          // Create sieve     sieve(n);        // Initialize result     let result = 1;       // Find exponents of all primes which     // divides n and less than n     for(let i = 0; i < allPrimes.length; i++)     {                  // Current divisor         let p = allPrimes[i];           // Find the highest power (stored in exp)'         // of allPrimes[i] that divides n using         // Legendre's formula.         let exp = 0;                  while (p <= n)         {             exp = exp + Math.floor(n/p);             p = p*allPrimes[i];         }           // Using the divisor function to calculate         // the sum         result = Math.floor(result * (Math.pow(                  allPrimes[i], exp + 1) - 1) /                       (allPrimes[i] - 1));     }       // Return total divisors     return result; }  // Driver code document.write(factorialDivisors(4));  // This code is contributed by rag2127  </script> 

Output: 

60

Time Complexity: O(n*log(log(n)))

Auxiliary Space: O(n)

 


Next Article
GFact | 2x + 1(where x > 0) is prime if and only if x is a power of 2

K

kartik
Improve
Article Tags :
  • Mathematical
  • DSA
  • factorial
  • number-theory
  • divisors
Practice Tags :
  • factorial
  • Mathematical
  • number-theory

Similar Reads

    Number Theory for DSA & Competitive Programming
    What is Number Theory?Number theory is a branch of pure mathematics that deals with the properties and relationships of numbers, particularly integers. It explores the fundamental nature of numbers and their mathematical structures. Number theory has been studied for centuries and has deep connectio
    3 min read
    Number Theory (Interesting Facts and Algorithms)
    Questions based on various concepts of number theory and different types of number are quite frequently asked in programming contests. In this article, we discuss some famous facts and algorithms:Interesting Facts of Number Theory :1. All 4 digit palindromic numbers are divisible by 11.2. If we repe
    5 min read
    How to prepare for ACM - ICPC?
    ACM ICPC(Association for Computing Machinery - International Collegiate Programming Contest) is a worldwide annual multi-tiered programming contest being organized for over thirteen years. The contest is sponsored by IBM. This article focuses on what all topics that are important for competitive pro
    7 min read

    Basics of Number Theory

    Program to Find GCD or HCF of Two Numbers
    Given two positive integers a and b, the task is to find the GCD of the two numbers.Note: The GCD (Greatest Common Divisor) or HCF (Highest Common Factor) of two numbers is the largest number that divides both of them. Examples:Input: a = 20, b = 28Output: 4Explanation: The factors of 20 are 1, 2, 4
    12 min read
    Program to find LCM of two numbers
    Given two positive integers a and b. Find the Least Common Multiple (LCM) of a and b.LCM of two numbers is the smallest number which can be divided by both numbers. Input : a = 10, b = 5Output : 10Explanation : 10 is the smallest number divisible by both 10 and 5Input : a = 5, b = 11Output : 55Expla
    5 min read
    Factorial of a Number
    Given the number n (n >=0), find its factorial. Factorial of n is defined as 1 x 2 x ... x n. For n = 0, factorial is 1. We are going to discuss iterative and recursive programs in this post.Examples:Input: n = 5Output: 120Explanation: 5! = 5 * 4 * 3 * 2 * 1 = 120Input: n = 4Output: 24Explanation
    7 min read
    Print all prime factors of a given number
    Given a number n, the task is to find all prime factors of n.Examples:Input: n = 24Output: 2 2 2 3Explanation: The prime factorization of 24 is 23×3.Input: n = 13195Output: 5 7 13 29Explanation: The prime factorization of 13195 is 5×7×13×29.Approach:Every composite number has at least one prime fact
    6 min read
    Binomial Coefficient
    Given an integer values n and k, the task is to find the value of Binomial Coefficient C(n, k).A binomial coefficient C(n, k) can be defined as the coefficient of x^k in the expansion of (1 + x)^n.A binomial coefficient C(n, k) also gives the number of ways, disregarding order, that k objects can be
    15+ min read
    Program for nth Catalan Number
    Catalan numbers are defined as a mathematical sequence that consists of positive integers, which can be used to find the number of possibilities of various combinations. The nth term in the sequence denoted Cn, is found in the following formula: \frac{(2n)!}{((n + 1)! n!)} The first few Catalan numb
    13 min read
    Euclid's lemma
    We are given two numbers x and y. We know that a number p divides their product. Can we say for sure that p also divides one of them? The answer is no. For example, consider x = 15, y = 6 and p = 9. p divides the product 15*6, but doesn't divide any of them. What if p is prime? Euclid's lemma states
    1 min read
    Euclidean algorithms (Basic and Extended)
    The Euclidean algorithm is a way to find the greatest common divisor of two positive integers. GCD of two numbers is the largest number that divides both of them. A simple way to find GCD is to factorize both numbers and multiply common prime factors.Examples:input: a = 12, b = 20Output: 4Explanatio
    9 min read

    Modular Arithmetic

    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 Addition
    Modular addition is a basic math concept used in computers and number systems. It is commonly used in areas like cryptography (data security), coding, and digital signal processing. In modular addition, you add two numbers normally, but if the result reaches a certain fixed number (called the modulu
    4 min read
    Modular Multiplication
    Given three integers a, b, and M, where M is the modulus. Compute the result of the modular multiplication of a and b under modulo M.((a×b) mod M)Examples:Input: a = 5, b = 3, M = 11Output: 4Explanation: a × b = 5 × 3 = 15, 15 % 11 = 4, so the result is 4.Input: a = 12, b = 15, M = 7Output: 5Explana
    6 min read
    Modular Division
    Given three positive integers a, b, and M, the objective is to find (a/b) % M i.e., find the value of (a × b-1 ) % M, where b-1 is the modular inverse of b modulo M.Examples: Input: a = 10, b = 2, M = 13Output: 5Explanation: The modular inverse of 2 modulo 13 is 7, so (10 / 2) % 13 = (10 × 7) % 13 =
    13 min read
    Euler's Totient Function
    Given an integer n, find the value of Euler's Totient Function, denoted as Φ(n). The function Φ(n) represents the count of positive integers less than or equal to n that are relatively prime to n. Euler's Totient function Φ(n) for an input n is the count of numbers in {1, 2, 3, ..., n-1} that are re
    10 min read
    Euler's Totient function for all numbers smaller than or equal to n
    Euler's Totient function ?(n) for an input n is the count of numbers in {1, 2, 3, ..., n} that are relatively prime to n, i.e., the numbers whose GCD (Greatest Common Divisor) with n is 1. For example, ?(4) = 2, ?(3) = 2 and ?(5) = 4. There are 2 numbers smaller or equal to 4 that are relatively pri
    13 min read
    Modular Exponentiation (Power in Modular Arithmetic)
    Given three integers x, n, and M, compute (x^n) % M (remainder when x raised to the power n is divided by M).Examples : Input: x = 3, n = 2, M = 4Output: 1Explanation: 32 % 4 = 9 % 4 = 1.Input: x = 2, n = 6, M = 10Output: 4Explanation: 26 % 10 = 64 % 10 = 4.Table of Content[Naive Approach] Repeated
    6 min read
    Program to find remainder without using modulo or % operator
    Given two numbers 'num' and 'divisor', find remainder when 'num' is divided by 'divisor'. The use of modulo or % operator is not allowed.Examples : Input: num = 100, divisor = 7 Output: 2 Input: num = 30, divisor = 9 Output: 3 Method 1 : C++ // C++ program to find remainder without using // modulo o
    9 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*0 m
    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
    Compute nCr%p using Lucas Theorem
    Given three numbers n, r and p, compute the value of nCr mod p. Examples: Input: n = 10, r = 2, p = 13 Output: 6 Explanation: 10C2 is 45 and 45 % 13 is 6. Input: n = 1000, r = 900, p = 13 Output: 8 We strongly recommend referring below post as a prerequisite of this.Compute nCr % p | Set 1 (Introduc
    12 min read
    Compute nCr%p using Fermat Little Theorem
    Given three numbers n, r and p, compute the value of nCr mod p. Here p is a prime number greater than n. Here nCr is Binomial Coefficient.Example: Input: n = 10, r = 2, p = 13 Output: 6 Explanation: 10C2 is 45 and 45 % 13 is 6. Input: n = 6, r = 2, p = 13 Output: 2Recommended PracticenCrTry It! We h
    15+ min read
    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
    Find Square Root under Modulo p | Set 1 (When p is in form of 4*i + 3)
    Given a number 'n' and a prime 'p', find square root of n under modulo p if it exists. It may be given that p is in the form for 4*i + 3 (OR p % 4 = 3) where i is an integer. Examples of such primes are 7, 11, 19, 23, 31, ... etc,Examples: Input: n = 2, p = 7Output: 3 or 4Explanation: 3 and 4 both a
    14 min read
    Find Square Root under Modulo p | Set 2 (Shanks Tonelli algorithm)
    Given a number ‘n’ and a prime ‘p’, find square root of n under modulo p if it exists. Examples: Input: n = 2, p = 113 Output: 62 62^2 = 3844 and 3844 % 113 = 2 Input: n = 2, p = 7 Output: 3 or 4 3 and 4 both are square roots of 2 under modulo 7 because (3*3) % 7 = 2 and (4*4) % 7 = 2 Input: n = 2,
    15+ min read
    Modular Division
    Given three positive integers a, b, and M, the objective is to find (a/b) % M i.e., find the value of (a × b-1 ) % M, where b-1 is the modular inverse of b modulo M.Examples: Input: a = 10, b = 2, M = 13Output: 5Explanation: The modular inverse of 2 modulo 13 is 7, so (10 / 2) % 13 = (10 × 7) % 13 =
    13 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
    Primitive root of a prime number n modulo n
    Given a prime number n, the task is to find its primitive root under modulo n. The primitive root of a prime number n is an integer r between[1, n-1] such that the values of r^x(mod n) where x is in the range[0, n-2] are different. Return -1 if n is a non-prime number. Examples: Input : 7 Output : S
    15 min read
    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
    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
    Multiply large integers under large modulo
    Given an integer a, b, m. Find (a * b ) mod m, where a, b may be large and their direct multiplication may cause overflow. However, they are smaller than half of the maximum allowed long long int value. Examples: Input: a = 426, b = 964, m = 235Output: 119Explanation: (426 * 964) % 235 = 410664 % 23
    7 min read
    Compute n! under modulo p
    Given a large number n and a prime p, how to efficiently compute n! % p?Examples : Input: n = 5, p = 13 Output: 3 5! = 120 and 120 % 13 = 3 Input: n = 6, p = 11 Output: 5 6! = 720 and 720 % 11 = 5 A Naive Solution is to first compute n!, then compute n! % p. This solution works fine when the value o
    15+ min read
    Wilson's Theorem
    Wilson's Theorem is a fundamental result in number theory that provides a necessary and sufficient condition for determining whether a given number is prime. It states that a natural number p > 1 is a prime number if and only if:(p - 1)! ≡ −1 (mod p)This means that the factorial of p - 1 (the pro
    2 min read

    Number Theory

    Introduction to Primality Test and School Method
    Given a positive integer, check if the number is prime or not. A prime is a natural number greater than 1 that has no positive divisors other than 1 and itself. Examples of the first few prime numbers are {2, 3, 5, ...}Examples : Input: n = 11Output: trueInput: n = 15Output: falseInput: n = 1Output:
    10 min read
    Fermat Method of Primality Test
    Given a number n, check if it is prime or not. We have introduced and discussed the School method for primality testing in Set 1.Introduction to Primality Test and School MethodIn this post, Fermat's method is discussed. This method is a probabilistic method and is based on Fermat's Little Theorem.
    10 min read
    Primality Test | Set 3 (Miller–Rabin)
    Given a number n, check if it is prime or not. We have introduced and discussed School and Fermat methods for primality testing.Primality Test | Set 1 (Introduction and School Method) Primality Test | Set 2 (Fermat Method)In this post, the Miller-Rabin method is discussed. This method is a probabili
    15+ min read
    Solovay-Strassen method of Primality Test
    We have already been introduced to primality testing in the previous articles in this series. Introduction to Primality Test and School MethodFermat Method of Primality TestPrimality Test | Set 3 (Miller–Rabin)The Solovay–Strassen test is a probabilistic algorithm used to check if a number is prime
    13 min read
    Legendre's formula - Largest power of a prime p in n!
    Given an integer n and a prime number p, the task is to find the largest x such that px (p raised to power x) divides n!.Examples: Input: n = 7, p = 3Output: x = 2Explanation: 32 divides 7! and 2 is the largest such power of 3.Input: n = 10, p = 3Output: x = 4Explanation: 34 divides 10! and 4 is the
    6 min read
    Carmichael Numbers
    A number n is said to be a Carmichael number if it satisfies the following modular arithmetic condition: power(b, n-1) MOD n = 1, for all b ranging from 1 to n such that b and n are relatively prime, i.e, gcd(b, n) = 1 Given a positive integer n, find if it is a Carmichael number. These numbers have
    8 min read
    Number Theory | Generators of finite cyclic group under addition
    Given a number n, find all generators of cyclic additive group under modulo n. Generator of a set {0, 1, ... n-1} is an element x such that x is smaller than n, and using x (and addition operation), we can generate all elements of the set.Examples: Input : 10 Output : 1 3 7 9 The set to be generated
    5 min read
    Sum of divisors of factorial of a number
    Given a number n, we need to calculate the sum of divisors of factorial of the number. Examples: Input : 4 Output : 60 Factorial of 4 is 24. Divisors of 24 are 1 2 3 4 6 8 12 24, sum of these is 60. Input : 6 Output : 2418 A Simple Solution is to first compute the factorial of the given number, then
    14 min read
    GFact | 2x + 1(where x > 0) is prime if and only if x is a power of 2
    A number of the form 2x + 1 (where x > 0) is prime if and only if x is a power of 2, i.e., x = 2n. So overall number becomes 22n + 1. Such numbers are called Fermat Number (Numbers of form 22n + 1). The first few Fermat numbers are 3, 5, 17, 257, 65537, 4294967297, .... An important thing to note
    1 min read
    Sieve of Eratosthenes
    Given a number n, find all prime numbers less than or equal to n.Examples:Input: n = 10Output: [2, 3, 5, 7]Explanation: The prime numbers up to 10 obtained by Sieve of Eratosthenes are [2, 3, 5, 7].Input: n = 35Output: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]Explanation: The prime numbers up to 35 o
    5 min read
    Program for Goldbach’s Conjecture (Two Primes with given Sum)
    Goldbach's conjecture is one of the oldest and best-known unsolved problems in the number theory of mathematics. Every even integer greater than 2 can be expressed as the sum of two primes. Examples: Input : n = 44 Output : 3 + 41 (both are primes) Input : n = 56 Output : 3 + 53 (both are primes) Re
    12 min read
    Pollard's Rho Algorithm for Prime Factorization
    Given a positive integer n, and that it is composite, find a divisor of it.Example:Input: n = 12;Output: 2 [OR 3 OR 4]Input: n = 187;Output: 11 [OR 17]Brute approach: Test all integers less than n until a divisor is found. Improvisation: Test all integers less than ?nA large enough number will still
    14 min read

    Game Theory

    Minimax Algorithm in Game Theory | Set 1 (Introduction)
    Minimax is a kind of backtracking algorithm that is used in decision making and game theory to find the optimal move for a player, assuming that your opponent also plays optimally. It is widely used in two player turn-based games such as Tic-Tac-Toe, Backgammon, Mancala, Chess, etc.In Minimax the tw
    9 min read
    Combinatorial Game Theory | Set 2 (Game of Nim)
    We strongly recommend to refer below article as a prerequisite of this. Combinatorial Game Theory | Set 1 (Introduction) In this post, Game of Nim is discussed. The Game of Nim is described by the following rules- “ Given a number of piles in which each pile contains some numbers of stones/coins. In
    15+ min read
    Combinatorial Game Theory | Set 4 (Sprague - Grundy Theorem)
    Prerequisites : Grundy Numbers/Numbers and MexWe have already seen in Set 2 (https://www.geeksforgeeks.org/combinatorial-game-theory-set-2-game-nim/), that we can find who wins in a game of Nim without actually playing the game.Suppose we change the classic Nim game a bit. This time each player can
    15 min read

    Practice Problems

    Rabin-Karp Algorithm for Pattern Searching
    Given two strings text and pattern string, your task is to find all starting positions where the pattern appears as a substring within the text. The strings will only contain lowercase English alphabets.While reporting the results, use 1-based indexing (i.e., the first character of the text is at po
    12 min read
    Measure one litre using two vessels and infinite water supply
    There are two vessels of capacities 'a' and 'b' respectively. We have infinite water supply. Give an efficient algorithm to make exactly 1 litre of water in one of the vessels. You can throw all the water from any vessel any point of time. Assume that 'a' and 'b' are Coprimes.Following are the steps
    15 min read
    Program to find last digit of n'th Fibonacci Number
    Given a number 'n', write a function that prints the last digit of n'th ('n' can also be a large number) Fibonacci number. Examples : Input : n = 0 Output : 0 Input: n = 2 Output : 1 Input : n = 7 Output : 3 Recommended PracticeThe Nth FibonnaciTry It! Method 1 : (Naive Method) Simple approach is to
    13 min read
    GCD of two numbers when one of them can be very large
    Given two numbers 'a' and 'b' such that (0 <= a <= 10^12 and b <= b < 10^250). Find the GCD of two given numbers.Examples : Input: a = 978 b = 89798763754892653453379597352537489494736 Output: 6 Input: a = 1221 b = 1234567891011121314151617181920212223242526272829 Output: 3 Solution : In
    9 min read
    Find Last Digit of a^b for Large Numbers
    You are given two integer numbers, the base a (number of digits d, such that 1 <= d <= 1000) and the index b (0 <= b <= 922*10^15). You have to find the last digit of a^b.Examples: Input : 3 10Output : 9Input : 6 2Output : 6Input : 150 53Output : 0 After taking few examples, we can notic
    9 min read
    Remainder with 7 for large numbers
    Given a large number as a string, find the remainder of number when divided by 7. Examples : Input : num = 1234 Output : 2 Input : num = 1232 Output : 0 Input : num = 12345 Output : 4Recommended PracticeRemainder with 7Try It! Simple Approach is to convert a string into number and perform the mod op
    8 min read
    Find (a^b)%m where 'a' is very large
    Given three numbers a, b and m where 1<=b,m<=10^6 and 'a' may be very large and contains upto 10^6 digits. The task is to find (a^b)%m. Examples: Input : a = 3, b = 2, m = 4 Output : 1 Explanation : (3^2)%4 = 9%4 = 1 Input : a = 987584345091051645734583954832576, b = 3, m = 11 Output: 10Recomm
    15+ 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
    Count sub-arrays whose product is divisible by k
    Given an integer K and an array arr[], the task is to count all the sub-arrays whose product is divisible by K.Examples: Input: arr[] = {6, 2, 8}, K = 4 Output: 4 Required sub-arrays are {6, 2}, {6, 2, 8}, {2, 8}and {8}.Input: arr[] = {9, 1, 14}, K = 6 Output: 1 Naive approach: Run nested loops and
    15+ min read
    Partition a number into two divisible parts
    Given a number (as string) and two integers a and b, divide the string in two non-empty parts such that the first part is divisible by a and the second part is divisible by b. If the string can not be divided into two non-empty parts, output "NO", else print "YES" with the two parts. Examples: Input
    15+ min read
    Find power of power under mod of a prime
    Given four numbers A, B, C and M, where M is prime number. Our task is to compute A raised to power (B raised to power C) modulo M. Example: Input : A = 2, B = 4, C = 3, M = 23Output : 643 = 64 so,2^64(mod 23) = 6 A Naive Approach is to calculate res = BC and then calculate Ares % M by modular expon
    7 min read
    Rearrange an array in maximum minimum form in O(1) extra space
    Given a sorted array of positive integers, rearrange the array alternately i.e first element should be the maximum value, second minimum value, third-second max, fourth-second min and so on. Examples:Input: arr[] = {1, 2, 3, 4, 5, 6, 7} Output: arr[] = {7, 1, 6, 2, 5, 3, 4}Explanation: First 7 is th
    8 min read
    Subset with no pair sum divisible by K
    Given an array of integer numbers, we need to find maximum size of a subset such that sum of each pair of this subset is not divisible by K. Examples : Input : arr[] = [3, 7, 2, 9, 1] K = 3 Output : 3 Maximum size subset whose each pair sum is not divisible by K is [3, 7, 1] because, 3+7 = 10, 3+1 =
    7 min read
    Number of substrings divisible by 6 in a string of integers
    Given a string consisting of integers 0 to 9. The task is to count the number of substrings which when convert into integer are divisible by 6. Substring does not contain leading zeroes. Examples: Input : s = "606". Output : 5 Substrings "6", "0", "6", "60", "606" are divisible by 6. Input : s = "48
    9 min read

    Miscellaneous Practice Problems

    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
    BigInteger Class in Java
    BigInteger class is used for the mathematical operation which involves very big integer calculations that are outside the limit of all available primitive data types. In this way, BigInteger class is very handy to use because of its large method library and it is also used a lot in competitive progr
    6 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
    How to avoid overflow in modular multiplication?
    Consider below simple method to multiply two numbers. C++ #include <iostream> using namespace std; #define ll long long // Function to multiply two numbers modulo mod ll multiply(ll a, ll b, ll mod) { // Multiply two numbers and then take modulo to prevent // overflow return ((a % mod) * (b %
    6 min read
    RSA Algorithm in Cryptography
    RSA(Rivest-Shamir-Adleman) Algorithm is an asymmetric or public-key cryptography algorithm which means it works on two different keys: Public Key and Private Key. The Public Key is used for encryption and is known to everyone, while the Private Key is used for decryption and must be kept secret by t
    13 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