给定两个正整数n和k。找到最小正整数x,使(x%k)*(x / k)== n,其中%是模运算符,/是整数除法运算符。
例子:
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
方法:使用Set-1中的K值解决了问题。在本文中,我们将使用因子方法来解决上述问题。下面给出解决上述问题的步骤。
- 由于方程的形式为a * b = N,因此a和b将是N的因数。
- 从1迭代到sqrt(N)以获取所有因子。
- 因子i和n / i可以是A或B。
- 如果i为A而n / i为B,则数字将为i * k +(n / i) 。我们可以通过将其与N进行比较来检查该数字是否为1,如果是,则该数字满足方程式。
- 如果i是B并且n / i是A,则数字将是(n / i)* k +(i) 。我们可以通过将其与N进行比较来检查该数字是否为1,如果是,则该数字满足方程式。
- 获得所有满足方程式的数字,并打印出其中最小的数字。
下面是上述方法的实现。
C++
// CPP Program to find the minimum
// positive X such that the given
// equation holds true
#include
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;
}
Java
// 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));
}
}
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
C#
// 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
}
PHP
Javascript
输出:
10
26
时间复杂度: O(sqrt(N)),其中N是给定的正整数。