Related Articles

# Modify N by adding its smallest positive divisor exactly K times

• Last Updated : 26 May, 2021

Given two positive integers N and K, the task is to find the value of N after incrementing the value of N in each operation by its smallest divisor exceeding N ( exceeding 1 ), exactly K times.

Examples:

Input: N = 5, K = 2
Output: 12
Explanation:
Smallest divisor of N (= 5) is 5. Therefore, N = 5 + 5 = 10.
Smallest divisor of N (= 10) is 2. Therefore, N = 5 + 2 = 12.
Therefore, the required output is 12.

Input: N = 6, K = 4
Output: 14

Naive Approach: The simplest approach to solve this problem to iterate over the range [1, K] using variable i and in each operation, find the smallest divisors greater than 1 of N and increment the value of N by the smallest divisor greater than 1 of N. Finally, print the value of N.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to find the smallest``// divisor of N greater than 1``int` `smallestDivisorGr1(``int` `N)``{``    ``for` `(``int` `i = 2; i <= ``sqrt``(N);``         ``i++) {` `        ``// If i is a divisor``        ``// of N``        ``if` `(N % i == 0) {``            ``return` `i;``        ``}``    ``}` `    ``// If N is a prime number``    ``return` `N;``}` `// Function to find the value of N by``// performing the operations K times``int` `findValOfNWithOperat(``int` `N, ``int` `K)``{` `    ``// Iterate over the range [1, K]``    ``for` `(``int` `i = 1; i <= K; i++) {` `        ``// Update N``        ``N += smallestDivisorGr1(N);``    ``}` `    ``return` `N;``}` `// Driver Code``int` `main()``{``    ``int` `N = 6, K = 4;` `    ``cout << findValOfNWithOperat(N, K);``    ``return` `0;``}`

## Java

 `// Java program to implement``// the above approach` `class` `GFG{` `// Function to find the smallest``// divisor of N greater than 1``static` `int` `smallestDivisorGr1(``int` `N)``{``    ``for` `(``int` `i = ``2``; i <= Math.sqrt(N);``         ``i++) {` `        ``// If i is a divisor``        ``// of N``        ``if` `(N % i == ``0``) {``            ``return` `i;``        ``}``    ``}` `    ``// If N is a prime number``    ``return` `N;``}` `// Function to find the value of N by``// performing the operations K times``static` `int` `findValOfNWithOperat(``int` `N, ``int` `K)``{` `    ``// Iterate over the range [1, K]``    ``for` `(``int` `i = ``1``; i <= K; i++)``    ``{` `        ``// Update N``        ``N += smallestDivisorGr1(N);``    ``}` `    ``return` `N;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `N = ``6``, K = ``4``;` `    ``System.out.print(findValOfNWithOperat(N, K));``}``}` `// This code is contributed by shikhasingrajput`

## C#

 `// C# program to implement``// the above approach``using` `System;``public` `class` `GFG``{` `  ``// Function to find the smallest``  ``// divisor of N greater than 1``  ``static` `int` `smallestDivisorGr1(``int` `N)``  ``{``    ``for` `(``int` `i = 2; i <= Math.Sqrt(N);``         ``i++) {` `      ``// If i is a divisor``      ``// of N``      ``if` `(N % i == 0) {``        ``return` `i;``      ``}``    ``}` `    ``// If N is a prime number``    ``return` `N;``  ``}` `  ``// Function to find the value of N by``  ``// performing the operations K times``  ``static` `int` `findValOfNWithOperat(``int` `N, ``int` `K)``  ``{` `    ``// Iterate over the range [1, K]``    ``for` `(``int` `i = 1; i <= K; i++)``    ``{` `      ``// Update N``      ``N += smallestDivisorGr1(N);``    ``}` `    ``return` `N;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main(String[] args)``  ``{``    ``int` `N = 6, K = 4;` `    ``Console.Write(findValOfNWithOperat(N, K));``  ``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``
Output:
`14`

Time Complexity: O(K * √N)
Auxiliary Space: O(1)

Efficient Approach: Follow the steps below to solve the problem:

• If N is an even number then update the value of N to (N + K * 2).
• Otherwise, find the smallest positive divisor greater than 1 of N say, smDiv and update the value N to (N + smDiv + (K – 1) * 2)
• Finally, print the value of N.

Below is the implementation of the above approach:

## C++14

 `// C++ program to implement``// the above approach``#include ``using` `namespace` `std;` `// Function to find the smallest``// divisor of N greater than 1``int` `smallestDivisorGr1(``int` `N)``{``    ``for` `(``int` `i = 2; i <= ``sqrt``(N);``         ``i++) {` `        ``// If i is a divisor``        ``// of N``        ``if` `(N % i == 0) {``            ``return` `i;``        ``}``    ``}` `    ``// If N is a prime number``    ``return` `N;``}` `// Function to find the value of N by``// performing the operations K times``int` `findValOfNWithOperat(``int` `N, ``int` `K)``{``    ``// If N is an even number``    ``if` `(N % 2 == 0) {` `        ``// Update N``        ``N += K * 2;``    ``}` `    ``// If N is an odd number``    ``else` `{` `        ``// Update N``        ``N += smallestDivisorGr1(N)``             ``+ (K - 1) * 2;``    ``}` `    ``return` `N;``}` `// Driver Code``int` `main()``{``    ``int` `N = 6, K = 4;` `    ``cout << findValOfNWithOperat(N, K);``    ``return` `0;``}`

## Java

 `// Java program to implement``// the above approach``class` `GFG{` `// Function to find the smallest``// divisor of N greater than 1``static` `int` `smallestDivisorGr1(``int` `N)``{``    ``for``(``int` `i = ``2``; i <= Math.sqrt(N); i++)``    ``{``        ` `        ``// If i is a divisor``        ``// of N``        ``if` `(N % i == ``0``)``        ``{``            ``return` `i;``        ``}``    ``}`` ` `    ``// If N is a prime number``    ``return` `N;``}`` ` `// Function to find the value of N by``// performing the operations K times``static` `int` `findValOfNWithOperat(``int` `N, ``int` `K)``{``    ` `    ``// If N is an even number``    ``if` `(N % ``2` `== ``0``)``    ``{``        ` `        ``// Update N``        ``N += K * ``2``;``    ``}`` ` `    ``// If N is an odd number``    ``else``    ``{``        ` `        ``// Update N``        ``N += smallestDivisorGr1(N) + (K - ``1``) * ``2``;``    ``}``    ``return` `N;``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `N = ``6``, K = ``4``;`` ` `    ``System.out.print(findValOfNWithOperat(N, K));``}``}` `// This code is contributed by target_2`

## C#

 `// C# program to implement``// the above approach``using` `System;` `class` `GFG{``    ` `// Function to find the smallest``// divisor of N greater than 1``static` `int` `smallestDivisorGr1(``int` `N)``{``    ``for``(``int` `i = 2; i <= Math.Sqrt(N); i++)``    ``{``        ` `        ``// If i is a divisor``        ``// of N``        ``if` `(N % i == 0)``        ``{``            ``return` `i;``        ``}``    ``}`` ` `    ``// If N is a prime number``    ``return` `N;``}`` ` `// Function to find the value of N by``// performing the operations K times``static` `int` `findValOfNWithOperat(``int` `N, ``int` `K)``{``    ` `    ``// If N is an even number``    ``if` `(N % 2 == 0)``    ``{``        ` `        ``// Update N``        ``N += K * 2;``    ``}`` ` `    ``// If N is an odd number``    ``else``    ``{``        ` `        ``// Update N``        ``N += smallestDivisorGr1(N) + (K - 1) * 2;``    ``}``    ``return` `N;``}` `// Driver code``static` `public` `void` `Main()``{``    ``int` `N = 6, K = 4;`` ` `    ``Console.Write(findValOfNWithOperat(N, K));``}``}` `// This code is contributed by Khushboogoyal499`

## Javascript

 ``
Output:
`14`

Time Complexity: O(√N)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up