Open In App

Find M for which numbers A, B, C form an A.P. if any one is divided by M

Given three positive integers A, B, and C, the task is to find out that, if we divide any one of them with any integer M(m>0), can they form an A.P.(Arithmetic Progression) in the same given order. If there are multiple values possible then print all of them and if no value is possible then print -1.

Examples:



Input:  A = 25, B = 10, C = 15
Output:  5
Explanation: If A(25) is divided by 5 then the three integers are 5, 10, 15 which form an A.P
with common difference 5.

Input:  A = 18, B = 4, C = 2
Output:  3.
Explanation: If A(18) is divided by 3 then the three integers are 6, 4, 2 which form an A.P
with common difference -2.



Input:  A = 7, B = 11, C = 13
Output:  -1
Explanation: It can be proved that there exists no positive integer which on dividing with 
any one of  the three numbers can form an A.P.

 

Approach: 

The three numbers A, B, and C are in A.P. if-

B – A = C – B = d

Here, 
A, B, and C are the three numbers
d is the common difference

Using the above common difference property of A.P. there can be three formulas for three cases-

For A / m1, B, C  to form an A.P., we have 

B – A / m1 = C – B

Thus, m1 = a / (2 * B – C)

For A, B / m2, C  to form an A.P., we have 

B / m2 – A = C – B / m2

Thus, m2 = 2 * B/ (C + A)

For A, B, C / m3  to form an A.P., we have 

B – A = C / m3 – B

Thus, m3 = C / (2 * B – A)

Below is the implementation for the above approach-




// C++ code to implement the given approach
#include <bits/stdc++.h>
using namespace std;
 
// Utility function to check
// if given argument is an integer or not
bool ifint(double x)
{
    int a = x;
 
    if (x - a > 0)
        return false;
    else
        return true;
}
 
// Function to find any integer M if exists
void findVal(int A, int B, int C)
{
    double m1 = (double)(A / (2 * B - C));
    double m2 = (double)(2 * B / (C + A));
    double m3 = (double)(C / (2 * B - A));
 
    // Checks if it is both
    // positive and an integer
    if (m1 > 1 && ifint(m1))
        cout << m1;
 
    else if (m2 > 1 && ifint(m2))
        cout << m2;
 
    else if (m3 > 1 && ifint(m3))
        cout << m3;
 
    else
        cout << "-1";
}
 
// Driver code
int main()
{
    int A = 2;
    int B = 4;
    int C = 18;
 
    findVal(A, B, C);
    return 0;
}




// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // Utility function to check
  // if given argument is an integer or not
  static Boolean ifint(double x)
  {
    int a = (int)x;
 
    if (x - a > 0)
      return false;
    else
      return true;
  }
 
  // Function to find any integer M if exists
  static void findVal(int A, int B, int C)
  {
    double m1 = (double)(A / (2 * B - C));
    double m2 = (double)(2 * B / (C + A));
    double m3 = (double)(C / (2 * B - A));
 
    // Checks if it is both
    // positive and an integer
    if (m1 > 1 && ifint(m1)){
      int M1 = (int)m1;
      System.out.print(M1);
    }
 
    else if (m2 > 1 && ifint(m2)){
      int M2 = (int)m2;
      System.out.print(M2);
    }
 
    else if (m3 > 1 && ifint(m3)){
      int M3 = (int)m3;
      System.out.print(M3);
    }
 
    else
      System.out.print("-1");
  }
 
  // Driver code
  public static void main (String[] args) {
    int A = 2;
    int B = 4;
    int C = 18;
 
    findVal(A, B, C);   
  }
}
 
// This code is contributed by hrithikgarg03188/




# Python code to implement the given approach
 
# Utility function to check
# if given argument is an integer or not
def ifint(x):
    a = x
 
    if (x - a > 0):
        return False
    else:
        return True
 
# Function to find any integer M if exists
def findVal(A, B, C):
     
    m1 = (A / (2 * B - C))
    m2 = (2 * B / (C + A))
    m3 = (C / (2 * B - A));
 
    # Checks if it is both
    # positive and an integer
    if (m1 > 1 and ifint(m1)):
        print(m1)
 
    elif (m2 > 1 and ifint(m2)):
        print(m2)
 
    elif (m3 > 1 and ifint(m3)):
        print(m3)
 
    else:
        print(-1)
 
# Driver code
A = 2
B = 4
C = 18
 
findVal(A, B, C)
 
# This code is contributed by Samim Hossain Mondal.




// C# code to implement the given approach
using System;
class GFG {
    // Utility function to check
    // if given argument is an integer or not
    static bool ifint(double x)
    {
        double a = x;
 
        if (x - a > 0)
            return false;
        else
            return true;
    }
 
    // Function to find any integer M if exists
    static void findVal(int A, int B, int C)
    {
        double m1 = Convert.ToDouble(A / (2 * B - C));
        double m2 = Convert.ToDouble(2 * B / (C + A));
        double m3 = Convert.ToDouble(C / (2 * B - A));
 
        // Checks if it is both
        // positive and an integer
        if (m1 > 1 && ifint(m1))
            Console.Write(m1);
 
        else if (m2 > 1 && ifint(m2))
            Console.Write(m2);
 
        else if (m3 > 1 && ifint(m3))
            Console.Write(m3);
 
        else
            Console.Write(-1);
    }
 
    // Driver code
    public static int Main()
    {
        int A = 2;
        int B = 4;
        int C = 18;
 
        findVal(A, B, C);
        return 0;
    }
}
 
// This code is contributed by Taranpreet




<script>
        // JavaScript code for the above approach
 
        // Utility function to check
        // if given argument is an integer or not
        function ifint(x) {
            let a = x;
 
            if (x - a > 0)
                return false;
            else
                return true;
        }
 
        // Function to find any integer M if exists
        function findVal(A, B, C) {
            let m1 = (A / (2 * B - C));
            let m2 = (2 * B / (C + A));
            let m3 = (C / (2 * B - A));
 
            // Checks if it is both
            // positive and an integer
            if (m1 > 1 && ifint(m1))
                document.write(m1);
 
            else if (m2 > 1 && ifint(m2))
                document.write(m2);
 
            else if (m3 > 1 && ifint(m3))
                document.write(m3);
 
            else
                document.write("-1");
        }
 
        // Driver code
        let A = 2;
        let B = 4;
        let C = 18;
 
        findVal(A, B, C);
 
       // This code is contributed by Potta Lokesh
    </script>

 
 

Output
3

 

Time Complexity: O(1)
Auxiliary Space: O(1)

 




// C++ code to implement the given approach
#include <bits/stdc++.h>
using namespace std;
 
// Utility function to check
// if given argument is an integer or not
bool ifint(double x)
{
    int a = x;
 
    if (x - a > 0)
        return false;
    else
        return true;
}
 
// Function to find any integer M if exists
void findVal(int A, int B, int C)
{
    double m1 = (double)(A / (2 * B - C));
    double m2 = (double)(2 * B / (C + A));
    double m3 = (double)(C / (2 * B - A));
 
    // Checks if it is both
    // positive and an integer
    if (m1 > 1 && ifint(m1))
        cout << m1;
 
    else if (m2 > 1 && ifint(m2))
        cout << m2;
 
    else if (m3 > 1 && ifint(m3))
        cout << m3;
 
    else
        cout << "-1";
}
 
// Driver code
int main()
{
    int A = 2;
    int B = 4;
    int C = 18;
 
    findVal(A, B, C);
    return 0;
}




// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // Utility function to check
  // if given argument is an integer or not
  static Boolean ifint(double x)
  {
    int a = (int)x;
 
    if (x - a > 0)
      return false;
    else
      return true;
  }
 
  // Function to find any integer M if exists
  static void findVal(int A, int B, int C)
  {
    double m1 = (double)(A / (2 * B - C));
    double m2 = (double)(2 * B / (C + A));
    double m3 = (double)(C / (2 * B - A));
 
    // Checks if it is both
    // positive and an integer
    if (m1 > 1 && ifint(m1)){
      int M1 = (int)m1;
      System.out.print(M1);
    }
 
    else if (m2 > 1 && ifint(m2)){
      int M2 = (int)m2;
      System.out.print(M2);
    }
 
    else if (m3 > 1 && ifint(m3)){
      int M3 = (int)m3;
      System.out.print(M3);
    }
 
    else
      System.out.print("-1");
  }
 
  // Driver code
  public static void main (String[] args) {
    int A = 2;
    int B = 4;
    int C = 18;
 
    findVal(A, B, C);   
  }
}
 
// This code is contributed by hrithikgarg03188/




# Python code for the above approach
 
# Utility function to check
# if given argument is an integer or not
def ifint(x):
    a = x;
 
    if (x - a > 0):
        return False;
    else:
        return True;
 
# Function to find any integer M if exists
def findVal(A, B, C):
    m1 = (A / (2 * B - C));
    m2 = (2 * B / (C + A));
    m3 = (C / (2 * B - A));
 
    # Checks if it is both
    # positive and an integer
    if (m1 > 1 and ifint(m1)):
        print(int(m1))
 
    elif (m2 > 1 and ifint(m2)):
        print(int(m2))
 
    elif (m3 > 1 and ifint(m3)):
        print(int(m3))
 
    else:
        print("-1");
 
# Driver code
A = 2;
B = 4;
C = 18;
 
findVal(A, B, C);
 
# This code is contributed by Saurabh Jaiswal




// C# code to implement the given approach
using System;
class GFG
{
   
    // Utility function to check
    // if given argument is an integer or not
    static bool ifint(double x)
    {
        double a = x;
 
        if (x - a > 0)
            return false;
        else
            return true;
    }
 
    // Function to find any integer M if exists
    static void findVal(int A, int B, int C)
    {
        double m1 = Convert.ToDouble(A / (2 * B - C));
        double m2 = Convert.ToDouble(2 * B / (C + A));
        double m3 = Convert.ToDouble(C / (2 * B - A));
 
        // Checks if it is both
        // positive and an integer
        if (m1 > 1 && ifint(m1))
            Console.Write(m1);
 
        else if (m2 > 1 && ifint(m2))
            Console.Write(m2);
 
        else if (m3 > 1 && ifint(m3))
            Console.Write(m3);
 
        else
            Console.Write(-1);
    }
 
    // Driver code
    public static int Main()
    {
        int A = 2;
        int B = 4;
        int C = 18;
 
        findVal(A, B, C);
        return 0;
    }
}
 
// This code is contributed by Taranpreet




<script>
        // JavaScript code for the above approach
 
        // Utility function to check
        // if given argument is an integer or not
        function ifint(x) {
            let a = x;
 
            if (x - a > 0)
                return false;
            else
                return true;
        }
 
        // Function to find any integer M if exists
        function findVal(A, B, C) {
            let m1 = (A / (2 * B - C));
            let m2 = (2 * B / (C + A));
            let m3 = (C / (2 * B - A));
 
            // Checks if it is both
            // positive and an integer
            if (m1 > 1 && ifint(m1))
                document.write(m1);
 
            else if (m2 > 1 && ifint(m2))
                document.write(m2);
 
            else if (m3 > 1 && ifint(m3))
                document.write(m3);
 
            else
                document.write("-1");
        }
 
        // Driver code
        let A = 2;
        let B = 4;
        let C = 18;
 
        findVal(A, B, C);
 
       // This code is contributed by Potta Lokesh
    </script>

Time Complexity: O(1).

Space Complexity: O(1) as no extra space has been used.


Article Tags :