Open In App

Find largest sum of digits in all divisors of n

Improve
Improve
Like Article
Like
Save
Share
Report

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




// 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




// 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




# 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#




// 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
// 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.
?>


Javascript




<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>


Output

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




// 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




// 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


Python3




# 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#




// 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
// 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.
?>


Javascript




<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>


Output

7

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
Previous
Next
Share your thoughts in the comments
Similar Reads