Divide the two given numbers by their common divisors
Last Updated :
15 Sep, 2022
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.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...