📌  相关文章
📜  找出两个数字,使它们的平方差等于N

📅  最后修改于: 2021-05-20 08:25:18             🧑  作者: Mango

给定一个整数N ,任务是找到两个非负整数AB ,使得A 2 -B 2 = N。如果不存在这样的整数,则打印-1

例子:

方法:

  • A 2 – B 2可以表示为(A – B)*(A + B)
  • 因此,对于A 2 -B 2等于N(A + B)(A-B)都应为N的因数。
  • 考虑A + BA – B分别等于Cd,Cd必须是N个除数,使得C≤dCd应该是相同的奇偶性的。
  • 因此,为了解决这个问题,我们只需要找到满足上述条件的任何一对CD即可。如果不存在这样的C&D ,则打印-1

下面是上述方法的实现:

C++
// C++ Program to find two numbers
// with difference of their
// squares equal to N
 
#include 
using namespace std;
 
// Function to check and print
// the required two positive integers
void solve(int n)
{
 
    // Iterate till sqrt(n) to find
    // factors of N
    for (int x = 1; x <= sqrt(n); x++) {
 
        // Check if x is one
        // of the factors of N
        if (n % x == 0) {
 
            // Store the factor
            int small = x;
 
            // Compute the other factor
            int big = n / x;
 
            // Check if the two factors
            // are of the same parity
            if (small % 2 == big % 2) {
 
                // Compute a and b
                int a = (small + big) / 2;
                int b = (big - small) / 2;
 
                cout << a << " "
                     << b << endl;
                return;
            }
        }
    }
 
    // If no pair exists
    cout << -1 << endl;
}
 
// Driver Code
int main()
{
    int n = 7;
 
    solve(n);
 
    return 0;
}


Java
// Java Program to find two numbers
// with difference of their
// squares equal to N
import java.util.*;
class GFG{
 
// Function to check and print
// the required two positive integers
static void solve(int n)
{
 
    // Iterate till sqrt(n) to find
    // factors of N
    for (int x = 1; x <= Math.sqrt(n); x++)
    {
 
        // Check if x is one
        // of the factors of N
        if (n % x == 0)
        {
 
            // Store the factor
            int small = x;
 
            // Compute the other factor
            int big = n / x;
 
            // Check if the two factors
            // are of the same parity
            if (small % 2 == big % 2)
            {
 
                // Compute a and b
                int a = (small + big) / 2;
                int b = (big - small) / 2;
 
                System.out.print(a + " " + b);
                return;
            }
        }
    }
 
    // If no pair exists
    System.out.print(-1);
}
 
// Driver Code
public static void main(String args[])
{
    int n = 7;
 
    solve(n);
}
}
 
// This code is contributed by Code_Mech


Python3
# Python3 Program to find two numbers
# with difference of their
# squares equal to N
from math import sqrt
 
# Function to check and print
# the required two positive integers
def solve(n) :
     
    # Iterate till sqrt(n) to find
    # factors of N
    for x in range(1, int(sqrt(n)) + 1) :
         
        # Check if x is one
        # of the factors of N
        if (n % x == 0) :
             
            # Store the factor
            small = x;
             
            # Compute the other factor
            big = n // x;
             
            # Check if the two factors
            # are of the same parity
            if (small % 2 == big % 2) :
                 
                # Compute a and b
                a = (small + big) // 2;
                b = (big - small) // 2;
                print(a, b) ;
                return;
                 
    # If no pair exists
    print(-1);
 
# Driver Code
if __name__ == "__main__" :
    n = 7;
    solve(n);
 
# This code is contributed by AnkitRai01


C#
// C# Program to find two numbers
// with difference of their
// squares equal to N
using System;
class GFG{
 
// Function to check and print
// the required two positive integers
static void solve(int n)
{
 
    // Iterate till sqrt(n) to find
    // factors of N
    for (int x = 1; x <= Math.Sqrt(n); x++)
    {
 
        // Check if x is one
        // of the factors of N
        if (n % x == 0)
        {
 
            // Store the factor
            int small = x;
 
            // Compute the other factor
            int big = n / x;
 
            // Check if the two factors
            // are of the same parity
            if (small % 2 == big % 2)
            {
 
                // Compute a and b
                int a = (small + big) / 2;
                int b = (big - small) / 2;
 
                Console.WriteLine(a + " " + b);
                return;
            }
        }
    }
 
    // If no pair exists
    Console.WriteLine(-1);
}
 
// Driver Code
public static void Main()
{
    int n = 7;
 
    solve(n);
}
}
 
// This code is contributed by Code_Mech


Javascript


输出:
4 3

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