Given two numbers A and B, the task is to Divide the two numbers A and B by their common divisors. The numbers A and B is less than 10^8.
Examples:
Input: A = 10, B = 15
Output: A = 2, B = 3
The common factors are 1, 5
Input: A = 100, B = 150
Output: A = 2, B = 3
Naive Approach: Iterate from i = 1 to minimum of A and B and check whether i is a factor of both A and B. If i is a factor of A and B then Divide the two numbers A and B by i.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void divide( int a, int b)
{
for ( int i = 2; i <= min(a, b); i++) {
while (a % i == 0 && b % i == 0) {
a = a / i;
b = b / i;
}
}
cout << "A = " << a << ", B = " << b << endl;
}
int main()
{
int A = 10, B = 15;
divide(A, B);
return 0;
}
|
C
#include <stdio.h>
void divide( int a, int b)
{
int min;
min = a;
if (min > b)
min = b;
for ( int i = 2; i <= min; i++) {
while (a % i == 0 && b % i == 0) {
a = a / i;
b = b / i;
}
}
printf ( "A = %d, B = %d\n" , a, b);
}
int main()
{
int A = 10, B = 15;
divide(A, B);
return 0;
}
|
Java
import java.util.*;
class solution
{
static void divide( int a, int b)
{
for ( int i = 2 ; i <= Math.min(a, b); i++) {
while (a % i == 0 && b % i == 0 ) {
a = a / i;
b = b / i;
}
}
System.out.println( "A = " +a+ ", B = " +b);
}
public static void main(String args[])
{
int A = 10 , B = 15 ;
divide(A, B);
}
}
|
Python3
def divide(a, b) :
for i in range ( 2 , min (a, b) + 1 ) :
while (a % i = = 0 and b % i = = 0 ) :
a = a / / i
b = b / / i
print ( "A =" , a, ", B =" , b)
if __name__ = = "__main__" :
A, B = 10 , 15
divide(A, B)
|
C#
using System;
class GFG
{
static void divide( int a, int b)
{
for ( int i = 2; i <= Math.Min(a, b); i++)
{
while (a % i == 0 && b % i == 0)
{
a = a / i;
b = b / i;
}
}
Console.WriteLine( "A = " +a+ ", B = " +b);
}
static public void Main ()
{
int A = 10, B = 15;
divide(A, B);
}
}
|
PHP
<?php
function divide( $a , $b )
{
for ( $i = 2; $i <= min( $a , $b ); $i ++)
{
while ( $a % $i == 0 &&
$b % $i == 0)
{
$a = $a / $i ;
$b = $b / $i ;
}
}
echo "A = " , $a , ", B = " , $b , "\n" ;
}
$A = 10;
$B = 15;
divide( $A , $B );
?>
|
Javascript
<script>
function divide(a, b)
{
for (let i = 2; i <= Math.min(a, b); i++) {
while (a % i == 0 && b % i == 0) {
a = a / i;
b = b / i;
}
}
document.write( "A = " + a + ", B = " + b + "<br>" );
}
let A = 10, B = 15;
divide(A, B);
</script>
|
Time Complexity: O(min(a,b))
Auxiliary Space: O(1)
An efficient approach is to use the same concept used in Common divisors of two numbers. Calculate the greatest common divisor (gcd) of given two numbers, and then divide the numbers by their gcd.
C++
#include <bits/stdc++.h>
using namespace std;
int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
void commDiv( int a, int b)
{
int n = gcd(a, b);
a = a / n;
b = b / n;
cout << "A = " << a << ", B = " << b << endl;
}
int main()
{
int a = 10, b = 15;
commDiv(a, b);
return 0;
}
|
C
#include <stdio.h>
int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
void commDiv( int a, int b)
{
int n = gcd(a, b);
a = a / n;
b = b / n;
printf ( "A = %d, B = %d\n" ,a,b);
}
int main()
{
int a = 10, b = 15;
commDiv(a, b);
return 0;
}
|
Java
class GFG
{
static int gcd( int a, int b)
{
if (a == 0 )
return b;
return gcd(b % a, a);
}
static void commDiv( int a, int b)
{
int n = gcd(a, b);
a = a / n;
b = b / n;
System.out.println( "A = " + a +
", B = " + b);
}
public static void main(String[] args)
{
int a = 10 , b = 15 ;
commDiv(a, b);
}
}
|
Python3
def gcd(a, b):
if (a = = 0 ):
return b
return gcd(b % a, a)
def commDiv(a, b):
n = gcd(a, b)
a = a / / n
b = b / / n
print ( "A =" , a, ", B =" , b)
a, b = 10 , 15
commDiv(a, b)
|
C#
using System;
class GFG
{
static int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
static void commDiv( int a, int b)
{
int n = gcd(a, b);
a = a / n;
b = b / n;
Console.WriteLine( "A = " + a +
", B = " + b);
}
public static void Main()
{
int a = 10, b = 15;
commDiv(a, b);
}
}
|
PHP
<?php
function gcd( $a , $b )
{
if ( $a == 0)
return $b ;
return gcd( $b % $a , $a );
}
function commDiv( $a , $b )
{
$n = gcd( $a , $b );
$a = (int)( $a / $n );
$b = (int)( $b / $n );
echo "A = " . $a .
", B = " . $b . "\n" ;
}
$a = 10;
$b = 15;
commDiv( $a , $b );
?>
|
Javascript
<script>
function gcd(a, b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
function commDiv(a, b)
{
let n = gcd(a, b);
a = parseInt(a / n, 10);
b = parseInt(b / n, 10);
document.write( "A = " + a + ", B = " + b);
}
let a = 10, b = 15;
commDiv(a, b);
</script>
|
Time complexity : O(log(min(a, b)))
Auxiliary Space : O(log(min(a, b))), for recursive stack space while calculating GCD.
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
15 Sep, 2022
Like Article
Save Article