Given two integers N and K, the task is to find the smallest positive integer X satisfying the equation:
(X / K) * (X % K) = N
Examples:
Input: N = 6, K = 3
Output: 11
Explanation:
For X = 11, (11 / 3) * (11 % 3) = 3 * 2 = 6
Therefore, the following equation satisfies.
Input: N = 4, K = 6
Output: 10
Explanation:
For X = 10, (10 / 6) * (10 % 6) = 1 * 4 = 4
Therefore, the following equation satisfies.
Brute Force Approach:
The brute force approach to solve this problem would be to iterate over all positive integers X and check if the given equation is satisfied. If the equation is satisfied for any value of X, we return that value as the smallest positive integer satisfying the equation.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int findMinSoln( int n, int k)
{
int x = 1;
while ( true ) {
if ((x / k) * (x % k) == n) {
return x;
}
x++;
}
}
int main()
{
int n = 4, k = 6;
cout << findMinSoln(n, k);
return 0;
}
|
Java
public class Main {
public static int findMinSoln( int n, int k) {
int x = 1 ;
while ( true ) {
if ((x / k) * (x % k) == n) {
return x;
}
x++;
}
}
public static void main(String[] args) {
int n = 4 , k = 6 ;
System.out.println(findMinSoln(n, k));
}
}
|
Python3
def findMinSoln(n, k):
x = 1
while True :
if (x / / k) * (x % k) = = n:
return x
x + = 1
if __name__ = = '__main__' :
n, k = 4 , 6
print (findMinSoln(n, k))
|
C#
using System;
class GFG
{
static int FindMinSoln( int n, int k)
{
int x = 1;
while ( true )
{
if ((x / k) * (x % k) == n)
{
return x;
}
x++;
}
}
static void Main()
{
int n = 4, k = 6;
int result = FindMinSoln(n, k);
Console.WriteLine(result);
}
}
|
Javascript
function findMinSoln(n, k) {
let x = 1;
while ( true ) {
if ((Math.floor(x / k) * (x % k)) === n) {
return x;
}
x++;
}
}
const n = 4;
const k = 6;
const result = findMinSoln(n, k);
console.log(result);
|
Time Complexity: O(X), which can be very large if X is a large number.
Auxiliary Space : O(1)
Approach:
The idea is to observe that, since (X / K) * (X % K) = N, therefore, N will be divisible by p = X % K, which is less than K. Therefore, for all i in the range [1, K) try all values of p where:

Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int findMinSoln( int n, int k)
{
int minSoln = INT_MAX;
for ( int i = 1; i < k; i++) {
if (n % i == 0)
minSoln
= min(minSoln, (n / i) * k + i);
}
return minSoln;
}
int main()
{
int n = 4, k = 6;
cout << findMinSoln(n, k);
}
|
Java
import java.util.*;
class GFG{
static int findMinSoln( int n, int k)
{
int minSoln = Integer.MAX_VALUE;
for ( int i = 1 ; i < k; i++)
{
if (n % i == 0 )
minSoln = Math.min(minSoln, (n / i) * k + i);
}
return minSoln;
}
public static void main(String[] args)
{
int n = 4 , k = 6 ;
System.out.println(findMinSoln(n, k));
}
}
|
Python3
import sys
def findMinSoln(n, k):
minSoln = sys.maxsize;
for i in range ( 1 , k):
if (n % i = = 0 ):
minSoln = min (minSoln, (n / / i) * k + i);
return minSoln;
if __name__ = = '__main__' :
n = 4 ;
k = 6 ;
print (findMinSoln(n, k));
|
C#
using System;
class GFG{
static int findMinSoln( int n, int k)
{
int minSoln = int .MaxValue;
for ( int i = 1; i < k; i++)
{
if (n % i == 0)
minSoln = Math.Min(minSoln,
(n / i) * k + i);
}
return minSoln;
}
public static void Main(String[] args)
{
int n = 4, k = 6;
Console.WriteLine(findMinSoln(n, k));
}
}
|
Javascript
<script>
function findMinSoln(n, k)
{
var minSoln = 1000000000;
for ( var i = 1; i < k; i++) {
if (n % i == 0)
minSoln
= Math.min(minSoln, (n / i) * k + i);
}
return minSoln;
}
var n = 4, k = 6;
document.write( findMinSoln(n, k));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)