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
  • Python Tutorial
  • Interview Questions
  • Python Quiz
  • Python Glossary
  • Python Projects
  • Practice Python
  • Data Science With Python
  • Python Web Dev
  • DSA with Python
  • Python OOPs
Open In App
Next Article:
Python Program for Number of solutions to Modular Equations
Next article icon

Python Program for Number of solutions to Modular Equations

Last Updated : 27 Jul, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

Given A and B, the task is to find the number of possible values that X can take such that the given modular equation (A mod X) = B holds good. Here, X is also called a solution of the modular equation. 

Examples:

Input : A = 26, B = 2
Output : 6
Explanation
X can be equal to any of {3, 4, 6, 8,
12, 24} as A modulus any of these values
equals 2 i. e., (26 mod 3) = (26 mod 4)
= (26 mod 6) = (26 mod 8) =Output:2 Input : 21 5
Output : 2
Explanation
X can be equal to any of {8, 16} as A modulus
any of these values equals 5 i.e. (21 mod
8) = (21 mod 16) = 5

If we carefully analyze the equation A mod X = B its easy to note that if (A = B) then there are infinitely many values greater than A that X can take. In the Case when (A < B), there cannot be any possible value of X for which the modular equation holds. So the only case we are left to investigate is when (A > B).So now we focus on this case in depth. Now, in this case we can use a well known relation i.e.

Dividend = Divisor * Quotient + Remainder

We are looking for all possible X i.e. Divisors given A i.e Dividend and B i.e., remainder. So,

We can say,
A = X * Quotient + BLet Quotient be represented as Y
∴ A = X * Y + B
A - B = X * Y∴ To get integral values of Y,
we need to take all X such that X divides (A - B)∴ X is a divisor of (A - B)

Python Program for Number of solutions to Modular Equations

So, the problem reduces to finding the divisors of (A - B) and the number of such divisors is the possible values X can take. But as we know A mod X would result in values from (0 to X - 1) we must take all such X such that X > B. Thus, we can conclude by saying that the number of divisors of (A - B) greater than B, are the all possible values X can take to satisfy A mod X = B 

Python3
# Python Program to find number of possible # values of X to satisfy A mod X = B  import math  # Returns the number of divisors of (A - B) # greater than B def calculateDivisors (A, B):     N = A - B     noOfDivisors = 0           a = math.sqrt(N)     for i in range(1, int(a + 1)):         # if N is divisible by i         if ((N % i == 0)):             # count only the divisors greater than B             if (i > B):                 noOfDivisors +=1                              # checking if a divisor isnot counted twice             if ((N / i) != i and (N / i) > B):                 noOfDivisors += 1;                      return noOfDivisors      # Utility function to calculate number of all # possible values of X for which the modular # equation holds true      def numberOfPossibleWaysUtil (A, B):     # if A = B there are infinitely many solutions     # to equation  or we say X can take infinitely     # many values > A. We return -1 in this case      if (A == B):         return -1              # if A < B, there are no possible values of     # X satisfying the equation     if (A < B):         return 0               # the last case is when A > B, here we calculate     # the number of divisors of (A - B), which are     # greater than B              noOfDivisors = 0     noOfDivisors = calculateDivisors;     return noOfDivisors               # Wrapper function for numberOfPossibleWaysUtil()  def numberOfPossibleWays(A, B):     noOfSolutions = numberOfPossibleWaysUtil(A, B)          #if infinitely many solutions available     if (noOfSolutions == -1):         print ("For A = " , A , " and B = " , B                 , ", X can take Infinitely many values"                 , " greater than "  , A)          else:         print ("For A = " , A , " and B = " , B                 , ", X can take " , noOfSolutions                 , " values") # main() A = 26 B = 2 numberOfPossibleWays(A, B)   A = 21 B = 5 numberOfPossibleWays(A, B)  # Contributed by _omg 

Output:

For A = 26 and B = 2, X can take 6 values
For A = 21 and B = 5, X can take 2 values

Time Complexity of the above approach is nothing but the time complexity of finding the number of divisors of (A - B) ie O(√(A - B)) Please refer complete article on Number of solutions to Modular Equations for more details!

Method 2: 

The new approach for solving the problem of finding the number of possible values of X to satisfy A mod X = B involves:

  • Checking for special cases where the solution is either infinite or non-existent.
  • Calculating the difference between A and B, and finding all its divisors.
  • Counting the number of divisors that are greater than B.
  • Returning the count of such divisors as the number of possible values of X.
Python3
# function to calculate the number of possible values for X def numberOfPossibleWays(A, B):     # if A and B are equal, there are no possible values for X     if A == B:         return -1     # if A is less than B, X cannot be greater than B     elif A < B:         return 0     else:         count = 0         diff = A - B         sqrt_diff = int(diff ** 0.5)         # iterate over the range of square root of difference         for i in range(1, sqrt_diff + 1):             # check if i is a factor of the difference             if diff % i == 0:                 # if i is greater than B, increment the count                 if i > B:                     count += 1                 # check if the quotient is greater than B and not equal to i, then increment the count                 if diff // i != i and diff // i > B:                     count += 1         return count  # test case 1 A = 26 B = 2 print("For A =", A, "and B =", B, ", X can take", numberOfPossibleWays(A, B), "values")  # test case 2 A = 21 B = 5 print("For A =", A, "and B =", B, ", X can take", numberOfPossibleWays(A, B), "values")  # Contributed by adityasha4x71 

Output
For A = 26 and B = 2 , X can take 6 values For A = 21 and B = 5 , X can take 2 values 

Time Complexity:  O(sqrt(A-B)), because the loop iterates from 1 to the square root of A-B. 

Auxiliary Space: O(1)


Next Article
Python Program for Number of solutions to Modular Equations

K

kartik
Improve
Article Tags :
  • Python Programs
  • DSA

Similar Reads

    Python Program to find the Quotient and Remainder of two numbers
    Given two numbers n and m. The task is to find the quotient and remainder of two numbers by dividing n by m. Examples: Input: n = 10 m = 3 Output: Quotient: 3 Remainder 1 Input n = 99 m = 5 Output: Quotient: 19 Remainder 4 Method 1: Naive approach The naive approach is to find the quotient using the
    2 min read
    Python | Program to count number of lists in a list of lists
    Given a list of lists, write a Python program to count the number of lists contained within the list of lists.  Examples: Input : [[1, 2, 3], [4, 5], [6, 7, 8, 9]] Output : 3 Input : [[1], ['Bob'], ['Delhi'], ['x', 'y']] Output : 4 Method #1 : Using len()  Python3 # Python3 program to Count number #
    5 min read
    Python Program to Count Non-Bouncy numbers
    If any number is represented in such a way that when we are reading it from left to right each ith Digit is greater or equal than i-1th digit is known as an increasing number. And if digits of any number are decreasing from left to right it's known as decreasing number.` Example: Increasing Number ?
    2 min read
    Python3 Program to Count rotations divisible by 4
    Given a large positive number as string, count all rotations of the given number which are divisible by 4. Examples: Input: 8Output: 1Input: 20Output: 1Rotation: 20 is divisible by 4 02 is not divisible by 4Input : 13502Output : 0No rotation is divisible by 4Input : 43292816Output : 55 rotations are
    2 min read
    Python Program to Find Numbers Divisible by Another Number
    We are given a list of numbers and a number. We have to find all the numbers in the list that are divisible by the given single number. Examples:Input: list=[8, 14, 21, 36, 43], num=3Output: 21, 36, 57Input: list=[2, 17, 25, 31, 48, 55], num=5Output: 25, 55In this article, we will discuss the differ
    3 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