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-
- When A is divided by an integer m1-
For A / m1, B, C to form an A.P., we have
B - A / m1 = C - B
Thus, m1 = a / (2 * B - C)
- When B is divided by an integer m2-
For A, B / m2, C to form an A.P., we have
B / m2 - A = C - B / m2
Thus, m2 = 2 * B/ (C + A)
- When C is divided by an integer m3-
For A, B, C / m3 to form an A.P., we have
B - A = C / m3 - B
Thus, m3 = C / (2 * B - A)
- Now we have possible values of M for each case, then check for each of the three values if any one of them is a positive integer, then that value is the required answer.
- If no such possible value exists then print -1.
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.