给定一个整数 X ,任务是找到对(Q, R)的Q可能值,使得它们的乘积等于X乘以它们的总和,其中Q ≤ R 且 X < 10 7 。打印这些Q值的总数和值。
例子:
Input: X = 3
Output:
2
4, 6
Explanation:
On taking Q = 4 and R = 12,
LHS = 12 x 4 = 48
RHS = 3(12 + 4) = 3 x 16 = 48 = LHS
Similarly, the equation also holds for value Q = 6 and R = 6.
LHS = 6 x 6 = 36
RHS = 3(6 + 6) = 3 x 12 = 36 = LHS
Input: X = 16
Output:
5
17, 18, 20, 24, 32
Explanation:
If Q = 17 and R = 272,
LHS = 17 x 272 = 4624
RHS = 16(17 + 272) = 16(289) = 4624 = LHS.
Similarly, there exists a value R for all other values of Q given in the output.
方法:思路是理解问题形成一个方程,即(Q x R) = X(Q + R)。
- 这个想法是从 1 迭代到 X 并检查每个 if ((( X + i ) * X) % i ) == 0 。
- 初始化一个结果向量,并从 1 开始迭代 X 的所有值。
- 检查上述条件是否成立。如果是,则将值X+i推入向量中。
- 让我们打破等式,以便更清楚地理解它,
The given expression is (Q x R) = X(Q + R)
On simplifying this we get,
=> QR – QX = RX
or, QR – RX = QX
or, R = QX / (Q – X)
- 因此,观察到(X+i)是 Q 的可能值,而(X+i)*X是 R 的可能值。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to find all possible values of Q
void values_of_Q(int X)
{
// Vector initialization
// to store all numbers
// satisfying the given condition
vector val_Q;
// Iterate for all the values of X
for (int i = 1; i <= X; i++) {
// Check if condition satisfied
// then push the number
if ((((X + i) * X)) % i == 0) {
// Possible value of Q
val_Q.push_back(X + i);
}
}
cout << val_Q.size() << endl;
// Print all the numbers
for (int i = 0; i < val_Q.size(); i++) {
cout << val_Q[i] << " ";
}
}
// Driver code
int main()
{
int X = 3;
values_of_Q(X);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to find all possible values of Q
static void values_of_Q(int X)
{
// Vector initialization
// to store all numbers
// satisfying the given condition
ArrayList val_Q = new ArrayList();
// Iterate for all the values of X
for (int i = 1; i <= X; i++)
{
// Check if condition satisfied
// then push the number
if ((((X + i) * X)) % i == 0)
{
// Possible value of Q
val_Q.add(X + i);
}
}
System.out.println(val_Q.size());
// Print all the numbers
for (int i = 0; i < val_Q.size(); i++)
{
System.out.print(val_Q.get(i)+" ");
}
}
// Driver code
public static void main(String[] args)
{
int X = 3;
values_of_Q(X);
}
}
// This code is contributed by Ritik Bansal
Python3
# Python3 program for the above approach
# Function to find all possible values of Q
def values_of_Q(X):
# Vector initialization
# to store all numbers
# satisfying the given condition
val_Q = []
# Iterate for all the values of X
for i in range(1, X + 1):
# Check if condition satisfied
# then push the number
if ((((X + i) * X)) % i == 0):
# Possible value of Q
val_Q.append(X + i)
print(len(val_Q))
# Print all the numbers
for i in range(len(val_Q)):
print(val_Q[i], end = " ")
# Driver Code
X = 3
values_of_Q(X)
# This code is contributed by divyeshrabadiya07
C#
// C# program for the above approach
using System;
using System.Collections.Generic;
class GFG{
// Function to find all possible
// values of Q
static void values_of_Q(int X)
{
// List initialization
// to store all numbers
// satisfying the given condition
List val_Q = new List();
// Iterate for all the values of X
for(int i = 1; i <= X; i++)
{
// Check if condition satisfied
// then push the number
if ((((X + i) * X)) % i == 0)
{
// Possible value of Q
val_Q.Add(X + i);
}
}
Console.WriteLine(val_Q.Count);
// Print all the numbers
for(int i = 0; i < val_Q.Count; i++)
{
Console.Write(val_Q[i] + " ");
}
}
// Driver code
public static void Main(String[] args)
{
int X = 3;
values_of_Q(X);
}
}
// This code is contributed by Amit Katiyar
Javascript
2
4 6
时间复杂度: O(N)
辅助空间: O(X)