Given two numbers **N** and **K**, the task is to find the minimum value **X** such that **N < X*K**.

**Examples:**

Input:N = 8, K = 7

Output:2

Explanation:

Numbers less than K divisible by N are 1, 2 and 4.

So the minimum value of X is 2 such that 8 < 2*7 = 14.

Input:N = 999999733, K = 999999732

Output:999999733

Explanation:

Since 999999733 is a prime number, so 999999733 is divisible by 1 and the number itself. Since K is less than 999999733.

So the minimum value of X is 999999733 such that 999999733 < 999999733*999999732.

**Naive Approach:** The given problem statement can be visualised as equation **K * X = N**. In this equation, the objective is to minimize X. So we have to find the **maximum K which divides N**. Below are the steps:

- Iterate over
**[1, K]**. - Check for each number
**i**such that**(N % i) = 0**. Keep updating the**max**variable that stores the maximum divisor of**N traversed upto i**. - The required answer is
**N/max**.

Below is the implementation of the above approach:

`// C++ program for the above approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find the value of X ` `void` `findMaxValue(` `int` `N, ` `int` `K) ` `{ ` ` ` `int` `packages; ` ` ` `int` `maxi = 1; ` ` ` ` ` `// Loop to check all the numbers ` ` ` `// divisible by N that yield ` ` ` `// minimum N/i value ` ` ` `for` `(` `int` `i = 1; i <= K; i++) { ` ` ` `if` `(N % i == 0) ` ` ` `maxi = max(maxi, i); ` ` ` `} ` ` ` ` ` `packages = N / maxi; ` ` ` ` ` `// Print the value of packages ` ` ` `cout << packages << endl; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `// Given N and K ` ` ` `int` `N = 8, K = 7; ` ` ` ` ` `// Function Call ` ` ` `findMaxValue(N, K); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

2

**Time Complexity:** *O(K)*

**Auxiliary Space:** *O(1)*

**Efficent Approach:** To optimize the above approach we will find the factor using the efficient approach discussed in this article. Below are the steps:

- Initialise the
**ans**variable to store the largest factor of**N**. - Iterate over
**[1, sqrt(N)]**and do the following:- Check if
**N**is divisible by**i**or not. - If not then check for the next number.
- Else if
**i ≤ K**and**N/i ≤ K**then update**ans**to the maximum**(i, N/i)**.

- Check if
- The value of
**X**will be**N/ans.**

Below is the implementation of the above approach:

`// C++ program for the above approach ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `// Function to find the largest ` `// factor of N which is less than ` `// or equal to K ` `int` `solve(` `int` `n, ` `int` `k) ` `{ ` ` ` `// Initialise the variable to ` ` ` `// store the largest factor of ` ` ` `// N <= K ` ` ` `int` `ans = 0; ` ` ` ` ` `// Loop to find all factors of N ` ` ` `for` `(` `int` `j = 1; ` ` ` `j * j <= n; j++) { ` ` ` ` ` `// Check if j is a ` ` ` `// factor of N or not ` ` ` `if` `(n % j == 0) { ` ` ` ` ` `// Check if j <= K ` ` ` `// If yes, then store ` ` ` `// the larger value between ` ` ` `// ans and j in ans ` ` ` `if` `(j <= k) { ` ` ` `ans = max(ans, j); ` ` ` `} ` ` ` ` ` `// Check if N/j <= K ` ` ` `// If yes, then store ` ` ` `// the larger value between ` ` ` `// ans and j in ans ` ` ` `if` `(n / j <= k) { ` ` ` `ans = max(ans, n / j); ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `// Since max value is always ` ` ` `// stored in ans, the maximum ` ` ` `// value divisible by N less than ` ` ` `// or equal to K will be returned. ` ` ` `return` `ans; ` `} ` ` ` `// Driver Code ` `int` `main() ` `{ ` ` ` `// Given N and K ` ` ` `int` `N = 8, K = 7; ` ` ` ` ` `// Function Call ` ` ` `cout << (N / solve(N, K)); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

2

**Time Complexity:** *O(sqrt(N))*

**Auxillary Space:** *O(1)*

## Recommended Posts:

- Find largest prime factor of a number
- Sum of largest prime factor of each number less than equal to n
- Largest factor of a given number which is a perfect square
- Find sum of a number and its maximum prime factor
- Program to find HCF (Highest Common Factor) of 2 Numbers
- Find the total number of composite factor for a given number
- Find the largest possible k-multiple set
- Find the largest multiple of 2, 3 and 5
- Find Second largest element in an array | Set 2
- Find the largest twins in given range
- Find the largest after deleting the given elements
- Find the largest three elements in an array
- Find the largest N digit multiple of N
- Find the largest pair sum in an unsorted array
- Program to find largest element in an array
- Find a pair in Array with second largest product
- Find largest number smaller than N with same set of digits
- Find the largest contiguous pair sum in given Array
- Legendre's formula (Given p and n, find the largest x such that p^x divides n!)
- Find the k largest numbers after deleting the given elements

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.