Given two integer p and q, the task is to find the minimum possible number x such that q % x = 0 and x % p = 0. If the conditions aren’t true for any number then print -1.
Examples:
Input: p = 3, q = 99
Output: 3
99 % 3 = 0
3 % 3 = 0
Input: p = 2, q = 7
Output: -1
Approach: If a number x satisfies the given condition then it’s obvious that q will be divided by p i.e. q % p = 0 because x is a multiple of p and q is a multiple of x.
So the minimum possible value of x will be the GCD of p and q and when q is not divisible by p then no number will satisfy the given condition.
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to return the minimum valid number // that satisfies the given conditions int minValidNumber( int p, int q)
{ // If possible
if (q % p == 0)
return __gcd(p, q);
else
return -1;
} // Driver Code int main()
{ int p = 2, q = 6;
cout << minValidNumber(p, q);
return 0;
} |
//Java implementation of the approach import java.io.*;
class GFG {
// Function to calculate gcd
static int __gcd( int a, int b)
{
// Everything divides 0
if (a == 0 || b == 0 )
return 0 ;
// base case
if (a == b)
return a;
// a is greater
if (a > b)
return __gcd(a - b, b);
return __gcd(a, b - a);
}
// Function to return the minimum valid number // that satisfies the given conditions static int minValidNumber( int p, int q)
{ // If possible
if (q % p == 0 )
return __gcd(p, q);
else
return - 1 ;
} // Driver Code public static void main (String[] args) {
int p = 2 , q = 6 ;
System.out.print(minValidNumber(p, q));
// THis code is contributed by Sachin.
}
} |
# Python3 implementation of the approach from math import gcd
# Function to return the minimum # valid number that satisfies the # given conditions def minValidNumber(p, q) :
# If possible
if (q % p = = 0 ) :
return gcd(p, q)
else :
return - 1
# Driver Code if __name__ = = "__main__" :
p, q = 2 , 6 ;
print (minValidNumber(p, q))
# This code is contributed by Ryuga |
// C# implementation of the approach using System;
class GFG
{ // Function to calculate gcd
static int __gcd( int a, int b)
{
// Everything divides 0
if (a == 0 || b == 0)
return 0;
// base case
if (a == b)
return a;
// a is greater
if (a > b)
return __gcd(a - b, b);
return __gcd(a, b - a);
}
// Function to return the minimum valid number // that satisfies the given conditions static int minValidNumber( int p, int q)
{ // If possible
if (q % p == 0)
return __gcd(p, q);
else
return -1;
} // Driver Code public static void Main()
{ int p = 2, q = 6;
Console.Write(minValidNumber(p, q));
} } // THis code is contributed // by Mukul Singh |
<?php // Php implementation of the approach function gcd( $a , $b )
{ // Everything divides 0
if ( $b == 0)
return $a ;
return gcd( $b , $a % $b );
} // Function to return the minimum valid // number that satisfies the given conditions function minValidNumber( $p , $q )
{ // If possible
if ( $q % $p == 0)
return gcd( $p , $q );
else
return -1;
} // Driver Code $p = 2;
$q = 6;
echo minValidNumber( $p , $q );
// This code is contributed by ita_c ?> |
<script> // Javascript implementation of the approach
// Function to calculate gcd
function __gcd(a, b)
{
// Everything divides 0
if (a == 0 || b == 0)
return 0;
// base case
if (a == b)
return a;
// a is greater
if (a > b)
return __gcd(a - b, b);
return __gcd(a, b - a);
}
// Function to return the minimum valid number
// that satisfies the given conditions
function minValidNumber(p, q)
{
// If possible
if (q % p == 0)
return __gcd(p, q);
else
return -1;
}
let p = 2, q = 6;
document.write(minValidNumber(p, q));
</script> |
2
Time Complexity: O(logn)
Auxiliary Space: O(1)