Given two integers N and K, the task is to generate the final outcome of performing K operations which involves adding the smallest divisor, other than 1, of the current value of N to it at every step.
Example:
Input: N = 9, K = 4
Output: 18
Explanation:
Divisors of 9 are {1, 3, 9}
1st Operation: N = 9 + 3 = 12
2nd Operation: N = 12 + 2 = 14
3rd Operation: N = 14 + 2 = 16
4th Operation: N = 16 + 2 = 18
Input: N = 16, K = 3
Output: 22
Naive Approach: The brute force approach for this problem is to perform the operation K times and then print the final number.
Efficient Approach: The trick here is that if the given N is even, smallest divisor will be always 2 for all the K operations. Hence, the required Kth number will be simply
required number = N + K * 2
Also if N is odd, the smallest divisor will be odd. Hence adding them will result in an even value (odd + odd = even). Therefore now the above trick can be applied for (K-1) operations, i.e.,
required number = N + smallest divisor of N + (K – 1) * 2
Below is the implementation of the above approach:
// C++ program to find the Kth number // formed after repeated addition of // smallest divisor of N #include<bits/stdc++.h> #include <cmath> using namespace std;
void FindValue( int N, int K)
{ // If N is even
if ( N % 2 == 0 )
{
N = N + 2 * K;
}
// If N is odd
else
{
int i;
for (i = 2; i < sqrt (N) + 1; i++)
{
if (N % i == 0)
break ;
}
// Add smallest divisor to N
N = N + i;
// Updated N is even
N = N + 2 * ( K - 1 );
}
cout << N << endl;
} // Driver code int main()
{ int N = 9;
int K = 4;
FindValue( N, K );
} // This code is contributed by Surendra_Gangwar |
// Java program to find the Kth number // formed after repeated addition of // smallest divisor of N import java.util.*;
class GFG{
static void FindValue( int N, int K)
{ // If N is even
if ( N % 2 == 0 )
{
N = N + 2 * K;
}
// If N is odd
else
{
int i;
for (i = 2 ; i < Math.sqrt(N) + 1 ; i++)
{
if (N % i == 0 )
break ;
}
// Add smallest divisor to N
N = N + i;
// Updated N is even
N = N + 2 * ( K - 1 );
}
System.out.print(N);
} // Driver code public static void main(String args[])
{ int N = 9 ;
int K = 4 ;
FindValue( N, K );
} } // This code is contributed by Nidhi_biet |
# Python3 program to find the # Kth number formed after # repeated addition of # smallest divisor of N import math
def FindValue(N, K):
# If N is even
if ( N % 2 = = 0 ):
N = N + 2 * K
# If N is odd
else :
# Find the smallest divisor
for i in range ( 2 , ( int )(math.sqrt(N)) + 1 ):
if ( N % i = = 0 ):
break
# Add smallest divisor to N
N = N + i
# Updated N is even
N = N + 2 * ( K - 1 )
print (N)
# Driver code if __name__ = = "__main__" :
N = 9
K = 4
FindValue( N, K )
|
// C# program to find the Kth number // formed after repeated addition of // smallest divisor of N using System;
class GFG{
static void FindValue( int N, int K)
{ // If N is even
if ( N % 2 == 0 )
{
N = N + 2 * K;
}
// If N is odd
else
{
int i;
for (i = 2; i < Math.Sqrt(N) + 1; i++)
{
if (N % i == 0)
break ;
}
// Add smallest divisor to N
N = N + i;
// Updated N is even
N = N + 2 * ( K - 1 );
}
Console.WriteLine(N);
} // Driver code public static void Main()
{ int N = 9;
int K = 4;
FindValue( N, K );
} } // This code is contributed by Code_Mech |
<script> // JavaScript program to find the Kth number // formed after repeated addition of // smallest divisor of N function FindValue(N, K)
{ // If N is even
if ( N % 2 == 0 )
{
N = N + 2 * K;
}
// If N is odd
else
{
let i;
for (i = 2; i < Math.sqrt(N) + 1; i++)
{
if (N % i == 0)
break ;
}
// Add smallest divisor to N
N = N + i;
// Updated N is even
N = N + 2 * ( K - 1 );
}
document.write(N + "<br>" );
} // Driver code let N = 9; let K = 4; FindValue( N, K ); // This code is contributed by Surbhi Tyagi. </script> |
18
Time complexity: O(?N )
Space Complexity: O(1)