Thursday, January 9, 2025
Google search engine
HomeData Modelling & AISquare root of two Complex Numbers

Square root of two Complex Numbers

Given two positive integers A and B representing the complex number Z in the form of Z = A + i * B, the task is to find the square root of the given complex number.

Examples:

Input: A = 0, B =1
Output:
The Square roots are: 
0.707107 + 0.707107*i
-0.707107 – 0.707107*i

Input: A = 4, B = 0
Output:
The Square roots are: 
2
-2

Approach: The given problem can be solved based on the following observations:

  • It is known that the square root of a complex number is also a complex number.
  • Then considering the square root of the complex number equal to X + i*Y, the value of (A + i*B) can be expressed as:
    • A + i * B = (X + i * Y) * (X + i * Y)
    • A + i * B = X2 – Y2+ 2 * i * X * Y
  • Equating the value of real and complex parts individually:
    • X = \sqrt (\frac {(A \pm \sqrt(A^{2} + B^{2}))}{2})
    •  
    • Y = \frac{B}{2 \times \sqrt (\frac {(A \pm \sqrt(A^{2} + B^{2}))}{2})}

From the above observations, calculate the value of X and Y using the above formula and print the value (X + i*Y) as the resultant square root value of the given complex number.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the square root of
// a complex number
void complexRoot(int A, int B)
{
    // Stores all the square roots
    vector<pair<double, double> > ans;
 
    // Stores the first square root
    double X1 = abs(sqrt((A + sqrt(A * A
                                   + B * B))
                         / 2));
    double Y1 = B / (2 * X1);
 
    // Push the square root in the ans
    ans.push_back({ X1, Y1 });
 
    // Stores the second square root
    double X2 = -1 * X1;
    double Y2 = B / (2 * X2);
 
    // If X2 is not 0
    if (X2 != 0) {
 
        // Push the square root in
        // the array ans[]
        ans.push_back({ X2, Y2 });
    }
 
    // Stores the third square root
    double X3 = (A - sqrt(A * A + B * B)) / 2;
 
    // If X3 is greater than 0
    if (X3 > 0) {
        X3 = abs(sqrt(X3));
        double Y3 = B / (2 * X3);
 
        // Push the square root in
        // the array ans[]
        ans.push_back({ X3, Y3 });
 
        // Stores the fourth square root
        double X4 = -1 * X3;
        double Y4 = B / (2 * X4);
 
        if (X4 != 0) {
 
            // Push the square root
            // in the array ans[]
            ans.push_back({ X4, Y4 });
        }
    }
 
    // Prints the square roots
    cout << "The Square roots are: "
         << endl;
 
    for (auto p : ans) {
        cout << p.first;
        if (p.second > 0)
            cout << "+";
        if (p.second)
            cout << p.second
                 << "*i" << endl;
        else
            cout << endl;
    }
}
 
// Driver Code
int main()
{
    int A = 0, B = 1;
    complexRoot(A, B);
 
    return 0;
}


Java




// Java program for the above approach
import java.util.*;
 
class GFG{
     
static class pair
{
    double first, second;
    public pair(double first,
                double second) 
    {
        this.first = first;
        this.second = second;
    }   
}
 
// Function to find the square root of
// a complex number
static void complexRoot(int A, int B)
{
     
    // Stores all the square roots
    Vector<pair> ans = new Vector<pair>();
 
    // Stores the first square root
    double X1 = Math.abs(Math.sqrt((A + Math.sqrt(A * A +
                                    B * B)) / 2));
    double Y1 = B / (2 * X1);
 
    // Push the square root in the ans
    ans.add(new pair( X1, Y1 ));
 
    // Stores the second square root
    double X2 = -1 * X1;
    double Y2 = B / (2 * X2);
 
    // If X2 is not 0
    if (X2 != 0)
    {
         
        // Push the square root in
        // the array ans[]
        ans.add(new pair(X2, Y2));
    }
 
    // Stores the third square root
    double X3 = (A - Math.sqrt(A * A + B * B)) / 2;
 
    // If X3 is greater than 0
    if (X3 > 0)
    {
        X3 = Math.abs(Math.sqrt(X3));
        double Y3 = B / (2 * X3);
 
        // Push the square root in
        // the array ans[]
        ans.add(new pair(X3, Y3));
 
        // Stores the fourth square root
        double X4 = -1 * X3;
        double Y4 = B / (2 * X4);
 
        if (X4 != 0)
        {
             
            // Push the square root
            // in the array ans[]
            ans.add(new pair(X4, Y4));
        }
    }
 
    // Prints the square roots
    System.out.print("The Square roots are: " + "\n");
 
    for(pair p : ans)
    {
        System.out.printf("%.4f", p.first);
        if (p.second > 0)
            System.out.print("+");
        if (p.second != 0)
            System.out.printf("%.4f*i\n", p.second);
        else
            System.out.println();
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int A = 0, B = 1;
     
    complexRoot(A, B);
}
}
 
// This code is contributed by shikhasingrajput


Python3




# Python3 program for the above approach
from math import sqrt
 
# Function to find the square root of
# a complex number
def complexRoot(A, B):
     
    # Stores all the square roots
    ans = []
 
    # Stores the first square root
    X1 = abs(sqrt((A + sqrt(A * A + B * B)) / 2))
    Y1 = B / (2 * X1)
 
    # Push the square root in the ans
    ans.append([X1, Y1])
 
    # Stores the second square root
    X2 = -1 * X1
    Y2 = B / (2 * X2)
 
    # If X2 is not 0
    if (X2 != 0):
 
        # Push the square root in
        # the array ans[]
        ans.append([X2, Y2])
 
    # Stores the third square root
    X3 = (A - sqrt(A * A + B * B)) / 2
 
    # If X3 is greater than 0
    if (X3 > 0):
        X3 = abs(sqrt(X3))
        Y3 = B / (2 * X3)
 
        # Push the square root in
        # the array ans[]
        ans.append([X3, Y3])
 
        # Stores the fourth square root
        X4 = -1 * X3
        Y4 = B / (2 * X4)
 
        if (X4 != 0):
 
            # Push the square root
            # in the array ans[]
            ans.append([X4, Y4])
 
    # Prints the square roots
    print("The Square roots are: ")
 
    for p in ans:
        print(round(p[0], 6), end = "")
        if (p[1] > 0):
            print("+", end = "")
        if (p[1]):
            print(str(round(p[1], 6)) + "*i")
        else:
            print()
 
# Driver Code
if __name__ == '__main__':
     
    A,B = 0, 1
    complexRoot(A, B)
 
# This code is contributed by mohit kumar 29


C#




// C# code to implement the approach
using System;
using System.Collections.Generic;
 
class GFG
{
  // Definition of Pair struct
  private struct Pair
  {
    public double First;
    public double Second;
 
    // Constructor
    public Pair(double first, double second)
    {
      First = first;
      Second = second;
    }
  }
 
  // Function to find the square root of
  // a complex number
  private static void ComplexRoot(int A, int B)
  {
    // Stores all the square roots
    var ans = new List<Pair>();
 
    // Stores the first square root
    double X1 = Math.Abs(Math.Sqrt((A + Math.Sqrt(A * A + B * B)) / 2));
    double Y1 = B / (2 * X1);
 
    // Push the square root in the ans
    ans.Add(new Pair(X1, Y1));
 
    // Stores the second square root
    double X2 = -1 * X1;
    double Y2 = B / (2 * X2);
 
    // If X2 is not 0
    if (X2 != 0)
    {
      // Push the square root in
      // the array ans[]
      ans.Add(new Pair(X2, Y2));
    }
 
    // Stores the third square root
    double X3 = (A - Math.Sqrt(A * A + B * B)) / 2;
 
    // If X3 is greater than 0
    if (X3 > 0)
    {
      X3 = Math.Abs(Math.Sqrt(X3));
      double Y3 = B / (2 * X3);
 
      // Push the square root in
      // the array ans[]
      ans.Add(new Pair(X3, Y3));
 
      // Stores the fourth square root
      double X4 = -1 * X3;
      double Y4 = B / (2 * X4);
 
      if (X4 != 0)
      {
        // Push the square root
        // in the array ans[]
        ans.Add(new Pair(X4, Y4));
      }
    }
 
    // Prints the square roots
    Console.WriteLine("The Square roots are: \n");
 
    foreach (var p in ans)
    {
      Console.Write($"{p.First:0.000000}");
 
      if (p.Second > 0)
      {
        Console.Write("+");
      }
 
      if (p.Second != 0)
      {
        Console.Write($"{p.Second:0.000000} * i\n");
      }
      else
      {
        Console.WriteLine();
      }
    }
  }
 
  // Driver code
  static void Main(string[] args)
  {
    int A = 0, B = 1;
 
    ComplexRoot(A, B);
  }
}
 
// This code is contributed by phasing17


Javascript




<script>
 
// Javascript program for the above approach
 
// Function to find the square root of
// a complex number
function complexRoot(A, B)
{
    // Stores all the square roots
    var ans = [];
 
    // Stores the first square root
    var X1 = Math.abs(Math.sqrt((A + Math.sqrt(A * A
                                   + B * B))
                         / 2));
    var Y1 = B / (2 * X1);
 
    // Push the square root in the ans
    ans.push([X1, Y1]);
 
    // Stores the second square root
    var X2 = -1 * X1;
    var Y2 = B / (2 * X2);
 
    // If X2 is not 0
    if (X2 != 0) {
 
        // Push the square root in
        // the array ans[]
        ans.push([X2, Y2]);
    }
 
    // Stores the third square root
    var X3 = (A - Math.sqrt(A * A + B * B)) / 2;
 
    // If X3 is greater than 0
    if (X3 > 0) {
        X3 = Math.abs(Math.sqrt(X3));
        var Y3 = B / (2 * X3);
 
        // Push the square root in
        // the array ans[]
        ans.push([X3, Y3]);
 
        // Stores the fourth square root
        var X4 = -1 * X3;
        var Y4 = B / (2 * X4);
 
        if (X4 != 0) {
 
            // Push the square root
            // in the array ans[]
            ans.push([X4, Y4]);
        }
    }
 
    // Prints the square roots
    document.write( "The Square roots are: <br>");
 
    ans.forEach(p => {
        document.write( p[0].toFixed(6));
        if (p[1] > 0)
            document.write( "+");
        if (p[1])
            document.write( p[1].toFixed(6)
                 + "*i<br>" );
        else
            document.write("<br>");
    });
}
 
// Driver Code
var A = 0, B = 1;
complexRoot(A, B);
 
</script>


Output: 

The Square roots are: 
0.707107+0.707107*i
-0.707107-0.707107*i

 

Time Complexity: O(1)
Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments