Find minimum x such that (x % k) * (x / k) == n | Set-2

Given two positive integers n and k. Find minimum positive integer x such that the (x % k) * (x / k) == n, where % is the modulus operator and / is the integer division operator.

Examples:

Input : n = 4, k = 6
Output :10
Explanation : (10 % 6) * (10 / 6) = (4) * (1) = 4 which is equal to n

Input : n = 5, k = 5
Output : 26

Approach: The problem has been solved using the value of K in the Set-1. In this article, we will use the factor method to solve the above problem. Given below are the steps to solve the above problem.

  • Since the equation is of the form a*b = N, so a and b will be the factors of N.
  • Iterate from 1 to sqrt(N) to get all the factors.
  • The factors i and n/i can be either of A or B.
    1. If i is A and n/i is B then the number will be i*k + (n/i). We can check if this number is the one by comparing it with N, if it is then it is a number which satisfies the equation.
    2. If i is B and n/i is A then the number will be (n/i)*k + (i). We can check if this number is the one by comparing it with N, if it is then it is a number which satisfies the equation.
  • Obtain all the numbers which satisfies the equation and print the smallest among them.

Below is the implementation of the above approach.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP Program to find the minimum
// positive X such that the given
// equation holds true
#include <bits/stdc++.h>
using namespace std;
  
// This function gives the required
// answer
int minimumX(int n, int k)
{
    int mini = INT_MAX;
  
    // Iterate for all the factors
    for (int i = 1; i * i <= n; i++) {
  
        // Check if i is a factor
        if (n % i == 0) {
            int fir = i;
            int sec = n / i;
            int num1 = fir * k + sec;
  
            // Consider i to be A and n/i to be B
            int res = (num1 / k) * (num1 % k);
            if (res == n)
                mini = min(num1, mini);
  
            int num2 = sec * k + fir;
            res = (num2 / k) * (num2 % k);
  
            // Consider i to be B and n/i to be A
            if (res == n)
                mini = min(num2, mini);
        }
    }
    return mini;
}
  
// Driver Code to test above function
int main()
{
    int n = 4, k = 6;
    cout << minimumX(n, k) << endl;
  
    n = 5, k = 5;
    cout << minimumX(n, k) << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java Program to find the minimum
// positive X such that the given
// equation holds true
import java.util.*;
  
class solution
{
  
// This function gives the required
// answer
static int minimumX(int n, int k)
{
    int mini = Integer.MAX_VALUE;
  
    // Iterate for all the factors
    for (int i = 1; i * i <= n; i++) {
  
        // Check if i is a factor
        if (n % i == 0) {
            int fir = i;
            int sec = n / i;
            int num1 = fir * k + sec;
  
            // Consider i to be A and n/i to be B
            int res = (num1 / k) * (num1 % k);
            if (res == n)
                mini = Math.min(num1, mini);
  
            int num2 = sec * k + fir;
            res = (num2 / k) * (num2 % k);
  
            // Consider i to be B and n/i to be A
            if (res == n)
                mini = Math.min(num2, mini);
        }
    }
    return mini;
}
  
// Driver Code to test above function
public static void main(String args[])
{
    int n = 4, k = 6;
    System.out.println(minimumX(n, k));
  
    n = 5;
    k = 5;
    System.out.println(minimumX(n, k));
}
}

chevron_right


Python3

# Python3 program to find the minimum
# positive X such that the given
# equation holds true
import sys

# This function gives the required
# answer
def minimumX(n, k):

mini = sys.maxsize

# Iterate for all the factors
i = 1
while i * i <= n : # Check if i is a factor if (n % i == 0) : fir = i sec = n // i num1 = fir * k + sec # Consider i to be A and n/i to be B res = (num1 // k) * (num1 % k) if (res == n): mini = min(num1, mini) num2 = sec * k + fir res = (num2 // k) * (num2 % k) # Consider i to be B and n/i to be A if (res == n): mini = min(num2, mini) i += 1 return mini # Driver Code if __name__ == "__main__": n = 4 k = 6 print (minimumX(n, k)) n = 5 k = 5 print (minimumX(n, k)) # This code is contributed by ita_c [tabby title = "C#"]

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# Program to find the minimum 
// positive X such that the given 
// equation holds true 
  
using System;
  
class solution 
  
// This function gives the required 
// answer 
static int minimumX(int n, int k) 
    int mini = int.MaxValue; 
  
    // Iterate for all the factors 
    for (int i = 1; i * i <= n; i++) { 
  
        // Check if i is a factor 
        if (n % i == 0) { 
            int fir = i; 
            int sec = n / i; 
            int num1 = fir * k + sec; 
  
            // Consider i to be A and n/i to be B 
            int res = (num1 / k) * (num1 % k); 
            if (res == n) 
                mini = Math.Min(num1, mini); 
  
            int num2 = sec * k + fir; 
            res = (num2 / k) * (num2 % k); 
  
            // Consider i to be B and n/i to be A 
            if (res == n) 
                mini = Math.Min(num2, mini); 
        
    
    return mini; 
  
// Driver Code to test above function 
public static void Main() 
    int n = 4, k = 6; 
    Console.WriteLine(minimumX(n, k)); 
  
    n = 5; 
    k = 5; 
    Console.WriteLine(minimumX(n, k)); 
// This code is contributed by Ryuga

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP Program to find the minimum
// positive X such that the given
// equation holds true
  
// Function gives the required
// answer
function minimumX($n, $k)
{
    $mini = PHP_INT_MAX;
  
    // Iterate for all the factors
    for ($i = 1; $i * $i <= $n; $i++) 
    {
  
        // Check if i is a factor
        if ($n % $i == 0) 
        {
            $fir = $i;
            $sec = (int)$n / $i;
            $num1 = $fir * $k + $sec;
  
            // Consider i to be A and n/i to be B
            $res = (int)($num1 / $k) * 
                        ($num1 % $k);
            if ($res == $n)
                $mini = min($num1, $mini);
  
            $num2 = $sec * $k + $fir;
            $res = (int)($num2 / $k) * 
                        ($num2 % $k);
  
            // Consider i to be B and n/i to be A
            if ($res == $n)
                $mini = min($num2, $mini);
        }
    }
    return $mini;
}
  
// Driver Code
$n = 4;
$k = 6;
echo minimumX($n, $k), "\n";
  
$n = 5;
$k = 5;
echo minimumX($n, $k), "\n";
  
// This code is contributed 
// by Sach_Code
?>

chevron_right


Output:

10
26

Time Complexity : O(sqrt(N)), where N is the given positive integer.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.