Given an integer number n, find the largest sum of digits in all divisors of n.
Examples :
Input : n = 12 Output : 6 Explanation: The divisors are: 1 2 3 4 6 12. 6 is maximum sum among all divisors Input : n = 68 Output : 14 Explanation: The divisors are: 1 2 4 68 68 consists of maximum sum of digit
Naive approach:
The idea is simple, we find all divisors of a number one by one. For every divisor, we compute sum of digits. Finally, we return the largest sum of digits.
Below is the implementation of the above approach:
// CPP program to find maximum // sum of digits in all divisors // of n numbers. #include <bits/stdc++.h> using namespace std;
// Function to get sum of digits int getSum( int n)
{ int sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n / 10;
}
return sum;
} // returns maximum sum int largestDigitSumdivisior( int n)
{ int res = 0;
for ( int i = 1; i <= n; i++)
// if i is factor of n
// then push the divisor
// in the stack.
if (n % i == 0)
res = max(res, getSum(i));
return res;
} // Driver Code int main()
{ int n = 14;
cout << largestDigitSumdivisior(n) << endl;
return 0;
} |
// Java program to find maximum // sum of digits in all divisors // of n numbers. import java.util.*;
import java.lang.*;
class GfG
{ // Function to get
// sum of digits
public static int getSum( int n)
{
int sum = 0 ;
while (n != 0 )
{
sum = sum + n % 10 ;
n = n/ 10 ;
}
return sum;
}
// returns maximum sum
public static int largestDigitSumdivisior( int n)
{
int res = 0 ;
for ( int i = 1 ; i <= n; i++)
// if i is factor of n
// then push the divisor
// in the stack.
if (n % i == 0 )
res = Math.max(res, getSum(i));
return res;
}
// Driver Code
public static void main(String argc[]){
int n = 14 ;
System.out.println(largestDigitSumdivisior(n));
}
} // This code is contributed // by Sagar Shukla |
# Python3 code to find # maximum sum of digits # in all divisors of n numbers. # Function to get sum of digits def getSum( n ):
sum = 0
while n ! = 0 :
sum = sum + n % 10
n = int ( n / 10 )
return sum
# returns maximum sum def largestDigitSumdivisior( n ):
res = 0
for i in range ( 1 , n + 1 ):
# if i is factor of n
# then push the divisor
# in the stack.
if n % i = = 0 :
res = max (res, getSum(i))
return res
# Driver Code n = 14
print (largestDigitSumdivisior(n) )
# This code is contributed # by "Sharad_Bhardwaj". |
// C# program to find maximum // sum of digits in all // divisors of n numbers. using System;
class GfG
{ // Function to get
// sum of digits
public static int getSum( int n)
{
int sum = 0;
while (n != 0)
{
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
// returns maximum sum
public static int largestDigitSumdivisior( int n)
{
int res = 0;
for ( int i = 1; i <= n; i++)
// if i is factor of n
// then push the divisor
// in the stack.
if (n % i == 0)
res = Math.Max(res, getSum(i));
return res;
}
// Driver Code
public static void Main()
{
int n = 14;
Console.WriteLine(largestDigitSumdivisior(n));
}
} // This code is contributed by vt_m |
<?php // PHP program to find maximum // sum of digits in all // divisors of n numbers. // Function to get // sum of digits function getSum( $n )
{ $sum = 0;
while ( $n != 0)
{ $sum = $sum + $n % 10;
$n = $n /10;
} return $sum ;
} // returns maximum sum function largestDigitSumdivisior( $n )
{ $res = 0;
for ( $i = 1; $i <= $n ; $i ++)
// if i is factor of n then
// push the divisor in
// the stack.
if ( $n % $i == 0)
$res = max( $res , getSum( $i ));
return $res ;
} // Driver Code
$n = 14;
echo largestDigitSumdivisior( $n );
// This code is contributed by anuj_67. ?> |
<script> // Javascript program to find maximum // sum of digits in all divisors // of n numbers. // Function to get sum of digits function getSum(n)
{ let sum = 0; while (n != 0)
{ sum = sum + n % 10;
n = Math.floor(n/10);
} return sum;
} // returns maximum sum function largestDigitSumdivisior(n)
{ let res = 0;
for (let i = 1; i <= n; i++)
// if i is factor of n
// then push the divisor
// in the stack.
if (n % i == 0)
res = Math.max(res, getSum(i));
return res;
} // Driver Code let n = 14;
document.write(largestDigitSumdivisior(n)
+ "<br>" );
// This code is contributed by Mayank Tyagi </script> |
7
Time Complexity: O(n*log10 (n))
Auxiliary Space: O(1)
An efficient approach will be to find the divisors in O(sqrt n). We follow the same steps as above, just iterate till sqrt(n) and get i and n/i as their divisors whenever n%i==0.
Below is the implementation of the above approach:
// CPP program to find // maximum sum of digits // in all divisors of n // numbers. #include <bits/stdc++.h> using namespace std;
// Function to get // sum of digits int getSum( int n)
{ int sum = 0;
while (n != 0)
{ sum = sum + n % 10;
n = n / 10;
} return sum;
} // returns maximum sum int largestDigitSumdivisior( int n)
{ int res = 0;
// traverse till sqrt(n)
for ( int i = 1; i <= sqrt (n); i++)
// if i is factor of
// n then push the
// divisor in the stack.
if (n % i == 0)
{
// check for both the divisors
res = max(res, getSum(i));
res = max(res,getSum(n / i));
}
return res;
} // Driver Code int main()
{ int n = 14;
cout << largestDigitSumdivisior(n)
<< endl;
return 0;
} |
// Java program to find maximum // sum of digits in all divisors // of n numbers. import java.io.*;
import java.math.*;
class GFG
{ // Function to get
// sum of digits
static int getSum( int n)
{
int sum = 0 ;
while (n != 0 )
{
sum = sum + n % 10 ;
n = n / 10 ;
}
return sum;
}
// returns maximum sum
static int largestDigitSumdivisior( int n)
{
int res = 0 ;
// traverse till sqrt(n)
for ( int i = 1 ; i <= Math.sqrt(n); i++)
{
// if i is factor of
// n then push the
// divisor in the stack.
if (n % i == 0 )
{
// check for both the divisors
res = Math.max(res, getSum(i));
res = Math.max(res, getSum(n / i));
}
}
return res;
}
// Driver Code
public static void main(String args[])
{
int n = 14 ;
System.out.println(largestDigitSumdivisior(n));
}
} // This code is contributed // by Nikita Tiwari |
# Python 3 program # to find maximum # sum of digits in # all divisors of # n numbers import math
# Function to get # sum of digits def getSum(n) :
sm = 0
while (n ! = 0 ) :
sm = sm + n % 10
n = n / / 10
return sm
# returns maximum sum def largestDigitSumdivisior(n) :
res = 0
# traverse till sqrt(n)
for i in range ( 1 , ( int )(math.sqrt(n)) + 1 ) :
# if i is factor of n then
# push the divisor in the
# stack.
if (n % i = = 0 ) :
# check for both the
# divisors
res = max (res, getSum(i))
res = max (res, getSum(n / / i))
return res
# Driver Code n = 14
print (largestDigitSumdivisior(n))
#This code is contributed # by Nikita Tiwari |
// C# program to find maximum sum // of digits in all divisors of n // numbers. using System;
class GFG
{ // Function to get
// sum of digits
static int getSum( int n)
{
int sum = 0;
while (n != 0)
{
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
// returns maximum sum
static int largestDigitSumdivisior( int n)
{
int res = 0;
// traverse till sqrt(n)
for ( int i = 1; i <= Math.Sqrt(n); i++)
{
// if i is factor of n then push the
// divisor in the stack.
if (n % i == 0)
{
// check for both the divisors
res = Math.Max(res, getSum(i));
res = Math.Max(res, getSum(n / i));
}
}
return res;
}
// Driver Code
public static void Main()
{
int n = 14;
Console.WriteLine(largestDigitSumdivisior(n));
}
} // This code is contributed by Vt_m |
<?php // PHP program to find maximum // sum of digits in all // divisors of n numbers // Function to get // sum of digits function getSum( $n )
{ $sum = 0;
while ( $n != 0)
{ $sum = $sum + $n % 10;
$n = $n / 10;
} return $sum ;
} // returns maximum sum function largestDigitSumdivisior( $n )
{ $res = 0;
// traverse till sqrt(n)
for ( $i = 1; $i <= sqrt( $n ); $i ++)
// if i is factor of
// n then push the
// divisor in the stack.
if ( $n % $i == 0)
{
// check for both the divisors
$res = max( $res , getSum( $i ));
$res = max( $res , getSum( $n / $i ));
}
return $res ;
} // Driver Code $n = 14;
echo largestDigitSumdivisior( $n );
// This code is contributed by anuj_67. ?> |
<script> // JavaScript program to find // maximum sum of digits // in all divisors of n // numbers. // Function to get // sum of digits function getSum(n)
{ var sum = 0;
while (n != 0)
{ sum = sum + n % 10;
n = parseInt(n / 10);
} return sum;
} // returns maximum sum function largestDigitSumdivisior(n)
{ var res = 0;
// traverse till sqrt(n)
for ( var i = 1; i <= Math.sqrt(n); i++)
// if i is factor of
// n then push the
// divisor in the stack.
if (n % i == 0)
{
// check for both the divisors
res = Math.max(res, getSum(i));
res = Math.max(res,getSum(n / i));
}
return res;
} // Driver Code var n = 14;
document.write(largestDigitSumdivisior(n)); </script> |
7
Time Complexity: O(sqrt(n) log n)
Auxiliary Space: O(1) as it is using constant space for variables