Pair with min absolute difference and whose product is N+1 or N+2
Given an integer N, the task is to find a pair such that whose product is N + 1 or N + 2 and absolute difference of the pair is minimum.
Examples:
Input: N = 8
Output: 3, 3
Explanation: 3 * 3 = 8 + 1
Input: N = 123
Output: 5, 25
Explanation: 5 * 25 = 123 + 2
Approach: The idea is to Iterate a loop with a loop variable i from sqrt(N+2) to 1, and check the following conditions:
- if (n + 1) % i = 0, then we will print the pair (i, (n + 1) / i).
- if (n + 2) % i = 0, then we will print the pair (i, (n + 2) / i).
- The first pair printed will be the pair with minimum absolute difference.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> 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
<script> // Javascript program for the above approach // Function to print pair (a, b) // such that a*b=N+1 or N+2 function closestDivisors(n) { // Loop to iterate over the // desired possible values for ( var i = parseInt(Math.sqrt(n + 2)); i > 0; i--) { // Check for condition 1 if ((n + 1) % i == 0) { document.write(i+ ", " +parseInt((n + 1) / i)); break ; } // Check for condition 2 if ((n + 2) % i == 0) { document.write(i+ ", " +parseInt((n + 2) / i)); break ; } } } // Driver Code // Given Number N = 123; // Function Call closestDivisors(N); </script> |
Output:
5, 25
Time Complexity: O(sqrt(N))
Auxiliary Space: O(1)
Please Login to comment...