📜  配对最小绝对差且乘积为N + 1或N + 2

📅  最后修改于: 2021-04-24 15:26:42             🧑  作者: Mango

给定整数N ,任务是找到一个对,使得其乘积为N + 1N + 2,并且该对的绝对差最小。

例子:

方法:想法是使用带循环变量i的循环从sqrt(N + 2)到1进行循环,并检查以下条件:

  • 如果(n + 1)%i = 0 ,那么我们将打印该对(i,(n + 1)/ i)
  • 如果(n + 2)%i = 0 ,那么我们将打印对(i,(n + 2)/ i)
  • 打印的第一对将是具有最小绝对差的对。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to print pair (a, b)
// such that a*b=N+1 or N+2
void closestDivisors(int n)
{
    // Loop to iterate over the
    // desired possible values
    for (int i = sqrt(n + 2);
         i > 0; i--) {
 
        // Check for condition 1
        if ((n + 1) % i == 0) {
            cout << i << ", "
                 << (n + 1) / i;
            break;
        }
 
        // Check for condition 2
        if ((n + 2) % i == 0) {
            cout << i << ", "
                 << (n + 2) / i;
            break;
        }
    }
}
 
// Driver Code
int main()
{
    // Given Number
    int N = 123;
 
    // Function Call
    closestDivisors(N);
}


Java
// Java program for the above approach
import java.util.*;
class GFG{
  
// Function to print pair (a, b)
// such that a*b=N+1 or N+2
static void closestDivisors(int n)
{
    // Loop to iterate over the
    // desired possible values
    for (int i = (int)Math.sqrt(n + 2); i > 0; i--)
    {
  
        // Check for condition 1
        if ((n + 1) % i == 0)
        {
           System.out.print(i +  ", " +
                           (n + 1) / i);
            break;
        }
  
        // Check for condition 2
        if ((n + 2) % i == 0)
        {
            System.out.print(i + ", " +
                            (n + 2) / i);
            break;
        }
    }
}
  
// Driver Code
public static void main(String[] args)
{
    // Given Number
    int N = 123;
  
    // Function Call
    closestDivisors(N);
}
}
 
// This code is contributed by rock_cool


Python
# Python3 program for the above approach
from math import sqrt, ceil, floor
 
# Function to prpair (a, b)
# such that a*b=N+1 or N+2
def closestDivisors(n):
 
    # Loop to iterate over the
    # desired possible values
    for i in range(ceil(sqrt(n + 2)), -1, -1):
 
        # Check for condition 1
        if ((n + 1) % i == 0):
            print(i, ",", (n + 1) // i)
            break
 
        # Check for condition 2
        if ((n + 2) % i == 0):
            print(i, ",", (n + 2) // i)
            break
  
# Driver Code
if __name__ == '__main__':
   
    # Given Number
    N = 123
 
    # Function Call
    closestDivisors(N)
 
# This code is contributed by Mohit Kumar


C#
// C# program for the above approach
using System;
class GFG{
   
// Function to print pair (a, b)
// such that a*b=N+1 or N+2
static void closestDivisors(int n)
{
    // Loop to iterate over the
    // desired possible values
    for (int i = (int)Math.Sqrt(n + 2); i > 0; i--)
    {
   
        // Check for condition 1
        if ((n + 1) % i == 0)
        {
           Console.Write(i +  ", " +
                           (n + 1) / i);
            break;
        }
   
        // Check for condition 2
        if ((n + 2) % i == 0)
        {
            Console.Write(i + ", " +
                         (n + 2) / i);
            break;
        }
    }
}
   
// Driver Code
public static void Main(string[] args)
{
    // Given Number
    int N = 123;
   
    // Function Call
    closestDivisors(N);
}
}
  
// This code is contributed by Ritik Bansal


Javascript


输出:
5, 25

时间复杂度: O(sqrt(N))
辅助空间: O(1)