Related Articles
Program for power of a complex number in O(log n)
• Last Updated : 19 Feb, 2019

Given a complex number of the form x + yi and an integer n, the task is to calculate the value of this complex number raised to the power n.

Examples:

```Input: num = 17 - 12i, n = 3
Output: -2431 + i ( -8676 )

Input: num = 18 - 13i, n = 8
Output: 16976403601 + i ( 56580909840 )
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: This algorithm works in O(log n) time complexity. Let c = a + bi and n is the exponent then,

```power(x, n) {
if(n == 1)
return x
sq = power(x, n/2);
if(n % 2 == 0)
return cmul(sq, sq);
if(n % 2 != 0)
return cmul(x, cmul(sq, sq));
}
```

As complex number has 2 fields one is real and other is complex hence we store it in an array. We use cmul() function to multiply two arrays where cmul() implements the below multiplication.

```If x1 = a + bi and x2 = c + di
then x1 * x2 = a * c - b * d + (b * c + d * a )i
```

As we can see in power() function the same function is called for input decreased by 1/2 times.
T(n) = T(n / 2) + c therefore, T(n) = log n

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;`` ` `// Function to return the product``// of two complex numbers``long` `long``* cmul(``long` `long``* sq1, ``long` `long``* sq2)``{``    ``long` `long``* ans = ``new` `long` `long``[2];`` ` `    ``// For real part``    ``ans[0] = (sq1[0] * sq2[0]) - (sq1[1] * sq2[1]);`` ` `    ``// For imaginary part``    ``ans[1] = (sq1[1] * sq2[0]) + sq1[0] * sq2[1];`` ` `    ``return` `ans;``}`` ` `// Function to return the complex number``// raised to the power n``long` `long``* power(``long` `long``* x, ``long` `long` `n)``{``    ``long` `long``* ans = ``new` `long` `long``[2];``    ``if` `(n == 0) {``        ``ans[0] = 0;``        ``ans[1] = 0;``        ``return` `ans;``    ``}``    ``if` `(n == 1)``        ``return` `x;`` ` `    ``// Recursive call for n/2``    ``long` `long``* sq = power(x, n / 2);``    ``if` `(n % 2 == 0)``        ``return` `cmul(sq, sq);``    ``return` `cmul(x, cmul(sq, sq));``}`` ` `// Driver code``int` `main()``{``    ``int` `n;``    ``long` `long``* x = ``new` `long` `long``[2];`` ` `    ``// Real part of the complex number``    ``x[0] = 18;`` ` `    ``// Imaginary part of the complex number``    ``x[1] = -13;``    ``n = 8;`` ` `    ``// Calculate and print the result``    ``long` `long``* a = power(x, n);``    ``cout << a[0] << ``" + i ( "` `<< a[1] << ``" )"` `<< endl;`` ` `    ``return` `0;``}`

## Python 3

 `# Python3 implementation of the approach`` ` `# Function to return the product``# of two complex numbers``def` `cmul(sq1, sq2):`` ` `    ``ans ``=` `[``0``] ``*` `2`` ` `    ``# For real part``    ``ans[``0``] ``=` `((sq1[``0``] ``*` `sq2[``0``]) ``-` `              ``(sq1[``1``] ``*` `sq2[``1``]))`` ` `    ``# For imaginary part``    ``ans[``1``] ``=` `((sq1[``1``] ``*` `sq2[``0``]) ``+` `               ``sq1[``0``] ``*` `sq2[``1``])`` ` `    ``return` `ans`` ` `# Function to return the complex ``# number raised to the power n``def` `power(x, n):`` ` `    ``ans ``=` `[``0``] ``*` `2``    ``if` `(n ``=``=` `0``):``        ``ans[``0``] ``=` `0``        ``ans[``1``] ``=` `0``        ``return` `ans``     ` `    ``if` `(n ``=``=` `1``):``        ``return` `x`` ` `    ``# Recursive call for n/2``    ``sq ``=` `power(x, n ``/``/` `2``)``    ``if` `(n ``%` `2` `=``=` `0``):``        ``return` `cmul(sq, sq)``    ``return` `cmul(x, cmul(sq, sq))`` ` `# Driver code``if` `__name__ ``=``=` `"__main__"``:`` ` `    ``x ``=` `[``0``] ``*` `2`` ` `    ``# Real part of the complex number``    ``x[``0``] ``=` `18`` ` `    ``# Imaginary part of the``    ``# complex number``    ``x[``1``] ``=` `-``13``    ``n ``=` `8`` ` `    ``# Calculate and print the result``    ``a ``=` `power(x, n)``    ``print``(a[``0``], ``" + i ( "``, a[``1``], ``" )"``)`` ` `# This code is contributed by ita_c`

## PHP

 ``
Output:
```16976403601 + i ( 56580909840 )
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up