Given an integer N. The task is to find the maximum possible sum of intermediate values (Including N and 1) attained after applying the below operation:
Divide N by any divisor (>1) until it becomes 1.
Examples:
Input: N = 10 Output: 16 Initially, N=10 1st Division -> N = 10/2 = 5 2nd Division -> N= 5/5 = 1 Input: N = 8 Output: 15 Initially, N=8 1st Division -> N = 8/2 = 4 2nd Division -> N= 4/2 = 2 3rd Division -> N= 2/2 = 1
Approach: Since the task is to maximize the sum of values after each step, try to maximize individual values. So, reduce the value of N by as little as possible. To achieve that, we divide N by its smallest divisor.
Below is the implementation of the above approach:
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the smallest divisor int smallestDivisor( int n)
{ int mx = sqrt (n);
for ( int i = 2; i <= mx; i++)
if (n % i == 0)
return i;
return n;
} // Function to find the maximum sum int maxSum( int n)
{ long long res = n;
while (n > 1) {
int divi = smallestDivisor(n);
n /= divi;
res += n;
}
return res;
} // Driver Code int main()
{ int n = 34;
cout << maxSum(n);
return 0;
} |
// C implementation of the above approach #include <stdio.h> #include<math.h> // Function to find the smallest divisor int smallestDivisor( int n)
{ int mx = sqrt (n);
for ( int i = 2; i <= mx; i++)
if (n % i == 0)
return i;
return n;
} // Function to find the maximum sum int maxSum( int n)
{ long long res = n;
while (n > 1) {
int divi = smallestDivisor(n);
n /= divi;
res += n;
}
return res;
} // Driver Code int main()
{ int n = 34;
printf ( "%d" ,maxSum(n));
return 0;
} // This code is contributed by allwink45. |
// Java implementation of the above approach import java.io.*;
class GFG
{ // Function to find the smallest divisor static double smallestDivisor( int n)
{ double mx = Math.sqrt(n);
for ( int i = 2 ; i <= mx; i++)
if (n % i == 0 )
return i;
return n;
} // Function to find the maximum sum static double maxSum( int n)
{ long res = n;
while (n > 1 )
{
double divi = smallestDivisor(n);
n /= divi;
res += n;
}
return res;
} // Driver Code
public static void main (String[] args)
{
int n = 34 ;
System.out.println (maxSum(n));
}
} // This code is contributed by jit_t. |
from math import sqrt
# Python 3 implementation of the above approach # Function to find the smallest divisor def smallestDivisor(n):
mx = int (sqrt(n))
for i in range ( 2 , mx + 1 , 1 ):
if (n % i = = 0 ):
return i
return n
# Function to find the maximum sum def maxSum(n):
res = n
while (n > 1 ):
divi = smallestDivisor(n)
n = int (n / divi)
res + = n
return res
# Driver Code if __name__ = = '__main__' :
n = 34
print (maxSum(n))
# This code is contributed by # Surendra_Gangwar |
// C# implementation of the above approach using System;
class GFG
{ // Function to find the smallest divisor
static double smallestDivisor( int n)
{
double mx = Math.Sqrt(n);
for ( int i = 2; i <= mx; i++)
if (n % i == 0)
return i;
return n;
}
// Function to find the maximum sum
static double maxSum( int n)
{
long res = n;
while (n > 1)
{
double divi = smallestDivisor(n);
n /= ( int )divi;
res += n;
}
return res;
}
// Driver Code
public static void Main()
{
int n = 34;
Console.WriteLine(maxSum(n));
}
} // This code is contributed by Ryuga. |
<?php // PHP implementation of the above approach // Function to find the smallest divisor function smallestDivisor( $n )
{ $mx = sqrt( $n );
for ( $i = 2; $i <= $mx ; $i ++)
if ( $n % $i == 0)
return $i ;
return $n ;
} // Function to find the maximum sum function maxSum( $n )
{ $res = $n ;
while ( $n > 1)
{
$divi = smallestDivisor( $n );
$n /= $divi ;
$res += $n ;
}
return $res ;
} // Driver Code
$n = 34;
echo maxSum( $n );
#This code is contributed by akt_mit. ?> |
<script> // javascript implementation of the above approach // Function to find the smallest divisor
function smallestDivisor(n) {
var mx = Math.sqrt(n);
for (i = 2; i <= mx; i++)
if (n % i == 0)
return i;
return n;
}
// Function to find the maximum sum
function maxSum(n) {
var res = n;
while (n > 1) {
var divi = smallestDivisor(n);
n /= divi;
res += n;
}
return res;
}
// Driver Code
var n = 34;
document.write(maxSum(n));
// This code is contributed by Rajput-Ji </script> |
52
Time Complexity: O(sqrt(n)*log(n)), where n represents the given integer.
Auxiliary Space: O(1), no extra space is required, so it is a constant.