Find largest sum of digits in all divisors of n
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
#include <bits/stdc++.h>
using namespace std;
int getSum( int n)
{
int sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
int largestDigitSumdivisior( int n)
{
int res = 0;
for ( int i = 1; i <= n; i++)
if (n % i == 0)
res = max(res, getSum(i));
return res;
}
int main()
{
int n = 14;
cout << largestDigitSumdivisior(n) << endl;
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
class GfG
{
public static int getSum( int n)
{
int sum = 0 ;
while (n != 0 )
{
sum = sum + n % 10 ;
n = n/ 10 ;
}
return sum;
}
public static int largestDigitSumdivisior( int n)
{
int res = 0 ;
for ( int i = 1 ; i <= n; i++)
if (n % i == 0 )
res = Math.max(res, getSum(i));
return res;
}
public static void main(String argc[]){
int n = 14 ;
System.out.println(largestDigitSumdivisior(n));
}
}
|
Python3
def getSum( n ):
sum = 0
while n ! = 0 :
sum = sum + n % 10
n = int ( n / 10 )
return sum
def largestDigitSumdivisior( n ):
res = 0
for i in range ( 1 , n + 1 ):
if n % i = = 0 :
res = max (res, getSum(i))
return res
n = 14
print (largestDigitSumdivisior(n) )
|
C#
using System;
class GfG
{
public static int getSum( int n)
{
int sum = 0;
while (n != 0)
{
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
public static int largestDigitSumdivisior( int n)
{
int res = 0;
for ( int i = 1; i <= n; i++)
if (n % i == 0)
res = Math.Max(res, getSum(i));
return res;
}
public static void Main()
{
int n = 14;
Console.WriteLine(largestDigitSumdivisior(n));
}
}
|
PHP
<?php
function getSum( $n )
{
$sum = 0;
while ( $n != 0)
{
$sum = $sum + $n % 10;
$n = $n /10;
}
return $sum ;
}
function largestDigitSumdivisior( $n )
{
$res = 0;
for ( $i = 1; $i <= $n ; $i ++)
if ( $n % $i == 0)
$res = max( $res , getSum( $i ));
return $res ;
}
$n = 14;
echo largestDigitSumdivisior( $n );
?>
|
Javascript
<script>
function getSum(n)
{
let sum = 0;
while (n != 0)
{
sum = sum + n % 10;
n = Math.floor(n/10);
}
return sum;
}
function largestDigitSumdivisior(n)
{
let res = 0;
for (let i = 1; i <= n; i++)
if (n % i == 0)
res = Math.max(res, getSum(i));
return res;
}
let n = 14;
document.write(largestDigitSumdivisior(n)
+ "<br>" );
</script>
|
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
#include <bits/stdc++.h>
using namespace std;
int getSum( int n)
{
int sum = 0;
while (n != 0)
{
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
int largestDigitSumdivisior( int n)
{
int res = 0;
for ( int i = 1; i <= sqrt (n); i++)
if (n % i == 0)
{
res = max(res, getSum(i));
res = max(res,getSum(n / i));
}
return res;
}
int main()
{
int n = 14;
cout << largestDigitSumdivisior(n)
<< endl;
return 0;
}
|
Java
import java.io.*;
import java.math.*;
class GFG
{
static int getSum( int n)
{
int sum = 0 ;
while (n != 0 )
{
sum = sum + n % 10 ;
n = n / 10 ;
}
return sum;
}
static int largestDigitSumdivisior( int n)
{
int res = 0 ;
for ( int i = 1 ; i <= Math.sqrt(n); i++)
{
if (n % i == 0 )
{
res = Math.max(res, getSum(i));
res = Math.max(res, getSum(n / i));
}
}
return res;
}
public static void main(String args[])
{
int n = 14 ;
System.out.println(largestDigitSumdivisior(n));
}
}
|
Python3
import math
def getSum(n) :
sm = 0
while (n ! = 0 ) :
sm = sm + n % 10
n = n / / 10
return sm
def largestDigitSumdivisior(n) :
res = 0
for i in range ( 1 , ( int )(math.sqrt(n)) + 1 ) :
if (n % i = = 0 ) :
res = max (res, getSum(i))
res = max (res, getSum(n / / i))
return res
n = 14
print (largestDigitSumdivisior(n))
|
C#
using System;
class GFG
{
static int getSum( int n)
{
int sum = 0;
while (n != 0)
{
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
static int largestDigitSumdivisior( int n)
{
int res = 0;
for ( int i = 1; i <= Math.Sqrt(n); i++)
{
if (n % i == 0)
{
res = Math.Max(res, getSum(i));
res = Math.Max(res, getSum(n / i));
}
}
return res;
}
public static void Main()
{
int n = 14;
Console.WriteLine(largestDigitSumdivisior(n));
}
}
|
PHP
<?php
function getSum( $n )
{
$sum = 0;
while ( $n != 0)
{
$sum = $sum + $n % 10;
$n = $n / 10;
}
return $sum ;
}
function largestDigitSumdivisior( $n )
{
$res = 0;
for ( $i = 1; $i <= sqrt( $n ); $i ++)
if ( $n % $i == 0)
{
$res = max( $res , getSum( $i ));
$res = max( $res , getSum( $n / $i ));
}
return $res ;
}
$n = 14;
echo largestDigitSumdivisior( $n );
?>
|
Javascript
<script>
function getSum(n)
{
var sum = 0;
while (n != 0)
{
sum = sum + n % 10;
n = parseInt(n / 10);
}
return sum;
}
function largestDigitSumdivisior(n)
{
var res = 0;
for ( var i = 1; i <= Math.sqrt(n); i++)
if (n % i == 0)
{
res = Math.max(res, getSum(i));
res = Math.max(res,getSum(n / i));
}
return res;
}
var n = 14;
document.write(largestDigitSumdivisior(n));
</script>
|
Time Complexity: O(sqrt(n) log n)
Auxiliary Space: O(1) as it is using constant space for variables
Last Updated :
20 Feb, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...