Sum of common divisors of two numbers A and B
Last Updated :
29 Jun, 2022
Given two number A and B, the task is to find the sum of common factors of two numbers A and B. The numbers A and B is less than 10^8.
Examples:
Input: A = 10, B = 15
Output: Sum = 6
The common factors are 1, 5, so their sum is 6
Input: A = 100, B = 150
Output: Sum = 93
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 add it to sum. Display the sum at the end of the loop.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int sum( int a, int b)
{
int sum = 0;
for ( int i = 1; i <= min(a, b); i++)
if (a % i == 0 && b % i == 0)
sum += i;
return sum;
}
int main()
{
int A = 10, B = 15;
cout << "Sum = " << sum(A, B) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int sum( int a, int b)
{
int sum = 0 ;
for ( int i = 1 ; i <= Math.min(a, b); i++)
if (a % i == 0 && b % i == 0 )
sum += i;
return sum;
}
public static void main (String[] args) {
int A = 10 , B = 15 ;
System.out.print( "Sum = " + sum(A, B));
}
}
|
Python 3
def sum (a, b):
sum = 0
for i in range ( 1 , min (a, b)):
if (a % i = = 0 and b % i = = 0 ):
sum + = i
return sum
A = 10
B = 15
print ( "Sum =" , sum (A, B))
|
C#
using System;
class GFG {
static int sum( int a, int b)
{
int sum = 0;
for ( int i = 1; i <= Math.Min(a, b); i++)
if (a % i == 0 && b % i == 0)
sum += i;
return sum;
}
public static void Main () {
int A = 10, B = 15;
Console.WriteLine( "Sum = " + sum(A, B));
}
}
|
PHP
<?php
function sum( $a , $b )
{
$sum = 0;
for ( $i = 1; $i <= min( $a , $b ); $i ++)
if ( $a % $i == 0 && $b % $i == 0)
$sum += $i ;
return $sum ;
}
$A = 10; $B = 15;
echo "Sum = " , sum( $A , $B );
?>
|
Javascript
<script>
function sum(a, b)
{
var sum = 0;
for ( var i = 1; i <= Math.min(a, b); i++)
if (a % i == 0 && b % i == 0)
sum += i;
return sum;
}
var A = 10, B = 15;
document.write( "Sum = " + sum(A, B) + "<br>" );
</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 find the sum of divisors of that 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);
}
int sumcommDiv( int a, int b)
{
int n = gcd(a, b);
int sum = 0;
for ( int i = 1; i <= sqrt (n); i++) {
if (n % i == 0) {
if (n / i == i)
sum += i;
else
sum += (n / i) + i;
}
}
return sum;
}
int main()
{
int a = 10, b = 15;
cout << "Sum = " << sumcommDiv(a, b);
return 0;
}
|
Java
import java.io.*;
class GFG {
static int gcd( int a, int b)
{
if (a == 0 )
return b;
return gcd(b % a, a);
}
static int sumcommDiv( int a, int b)
{
int n = gcd(a, b);
int sum = 0 ;
for ( int i = 1 ; i <= Math.sqrt(n); i++) {
if (n % i == 0 ) {
if (n / i == i)
sum += i;
else
sum += (n / i) + i;
}
}
return sum;
}
public static void main (String[] args) {
int a = 10 , b = 15 ;
System.out.println( "Sum = " + sumcommDiv(a, b));
}
}
|
Python3
from math import gcd,sqrt
def sumcommDiv(a, b):
n = gcd(a, b)
sum = 0
N = int (sqrt(n)) + 1
for i in range ( 1 ,N, 1 ):
if (n % i = = 0 ):
if (n / i = = i):
sum + = i
else :
sum + = (n / i) + i
return sum
if __name__ = = '__main__' :
a = 10
b = 15
print ( "Sum =" , int (sumcommDiv(a, b)))
|
C#
using System;
public class GFG{
static int gcd( int a, int b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
static int sumcommDiv( int a, int b)
{
int n = gcd(a, b);
int sum = 0;
for ( int i = 1; i <= Math.Sqrt(n); i++) {
if (n % i == 0) {
if (n / i == i)
sum += i;
else
sum += (n / i) + i;
}
}
return sum;
}
static public void Main (){
int a = 10, b = 15;
Console.WriteLine( "Sum = " + sumcommDiv(a, b));
}
}
|
PHP
<?php
function gcd( $a , $b )
{
if ( $a == 0)
return $b ;
return gcd( $b % $a , $a );
}
function sumcommDiv( $a , $b )
{
$n = gcd( $a , $b );
$sum = 0;
for ( $i = 1; $i <= sqrt( $n ); $i ++) {
if ( $n % $i == 0) {
if ( $n / $i == $i )
$sum += $i ;
else
$sum += ( $n / $i ) + $i ;
}
}
return $sum ;
}
$a = 10;
$b = 15;
echo "Sum = " , sumcommDiv( $a , $b );
?>
|
Javascript
<script>
function gcd(a, b)
{
if (a == 0)
return b;
return gcd(b % a, a);
}
function sumcommDiv(a, b)
{
var n = gcd(a, b);
var sum = 0;
for ( var i = 1; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
if (n / i == i)
sum += i;
else
sum += (n / i) + i;
}
}
return sum;
}
var a = 10, b = 15;
document.write( "Sum = " + sumcommDiv(a, b));
</script>
|
Time complexity: O(sqrt(n))
Auxiliary Space: O(logn)
Share your thoughts in the comments
Please Login to comment...