Roots of Unity
Given a small integer n, print all the n’th roots of unity up to 6 significant digits. We basically need to find all roots of equation xn – 1.
Examples:
Input : n = 1 Output : 1.000000 + i 0.000000 x - 1 = 0 , has only one root i.e., 1 Input : 2 Output : 1.000000 + i 0.000000 -1.000000 + i 0.000000 x2 - 1 = 0 has 2 distinct roots, i.e., 1 and -1
Any complex number is said to be root of unity if it gives 1 when raised to some power.
nth root of unity is any complex number such that it gives 1 when raised to the power n.
Mathematically, An nth root of unity, where n is a positive integer (i.e. n = 1, 2, 3, …) is a number z satisfying the equation z^n = 1 or , z^n - 1 = 0
We can use the De Moivre’s formula here ,
( Cos x + i Sin x )^k = Cos kx + i Sin kx Setting x = 2*pi/n, we can obtain all the nth roots of unity, using the fact that Nth roots are set of numbers given by, Cos (2*pi*k/n) + i Sin(2*pi*k/n) Where, 0 <= k < n
Using the above fact we can easily print all the nth roots of unity !
Below is the program for the same.
C++
// C++ program to print n'th roots of unity #include <bits/stdc++.h> using namespace std; // This function receives an integer n , and prints // all the nth roots of unity void printRoots( int n) { // theta = 2*pi/n double theta = M_PI*2/n; // print all nth roots with 6 significant digits for ( int k=0; k<n; k++) { // calculate the real and imaginary part of root double real = cos (k*theta); double img = sin (k*theta); // Print real and imaginary parts printf ( "%.6f" , real); img >= 0? printf ( " + i " ): printf ( " - i " ); printf ( "%.6f\n" , abs (img)); } } // Driver function to check the program int main() { printRoots(1); cout << endl; printRoots(2); cout << endl; printRoots(3); return 0; } |
Java
// Java program to print n'th roots of unity import java.io.*; class GFG { // This function receives an integer n , and prints // all the nth roots of unity static void printRoots( int n) { // theta = 2*pi/n double theta = 3.14 * 2 /n; // print all nth roots with 6 significant digits for ( int k= 0 ; k<n; k++) { // calculate the real and imaginary part of root double real = Math.cos(k*theta); double img = Math.sin(k*theta); // Print real and imaginary parts System.out.println(real); if (img >= 0 ) System.out.println( " + i " ); else System.out.println( " - i " ); System.out.println(Math.abs(img)); } } // Driver function to check the program public static void main (String[] args) { printRoots( 1 ); //System.out.println(); printRoots( 2 ); //System.out.println(); printRoots( 3 ); } } // This code is contributed by Raj |
Python3
# Python3 program to print n'th roots of unity import math # This function receives an integer n , and prints # all the nth roots of unity def printRoots(n): # theta = 2*pi/n theta = math.pi * 2 / n # print all nth roots with 6 significant digits for k in range ( 0 , n): # calculate the real and imaginary part of root real = math.cos(k * theta) img = math.sin(k * theta) # Print real and imaginary parts print (real, end = " " ) if (img > = 0 ): print ( " + i " , end = " " ) else : print ( " - i " , end = " " ) print ( abs (img)) # Driver function to check the program if __name__ = = '__main__' : printRoots( 1 ) printRoots( 2 ) printRoots( 3 ) # This code is contributed by # Sanjit_Prasad |
C#
// C# program to print n'th roots of unity using System; class GFG { // This function receives an integer n , and prints // all the nth roots of unity static void printRoots( int n) { // theta = 2*pi/n double theta = 3.14*2/n; // print all nth roots with 6 significant digits for ( int k=0; k<n; k++) { // calculate the real and imaginary part of root double real = Math.Cos(k*theta); double img = Math.Sin(k*theta); // Print real and imaginary parts Console.Write(real); if (img >= 0) Console.Write( " + i " ); else Console.Write( " - i " ); Console.WriteLine(Math.Abs(img)); } } // Driver function to check the program static void Main() { printRoots(1); printRoots(2); printRoots(3); } } // This code is contributed by mits |
PHP
<?php // PHP program to print n'th roots of unity // This function receives an integer n, // and prints all the nth roots of unity function printRoots( $n ) { // theta = 2*pi/n $theta = pi() * 2 / $n ; // print all nth roots with 6 // significant digits for ( $k = 0; $k < $n ; $k ++) { // calculate the real and imaginary // part of root $real = cos ( $k * $theta ); $img = sin( $k * $theta ); // Print real and imaginary parts print ( round ( $real , 6)); $img >= 0 ? print ( " + i " ): print ( " - i " ); printf( round ( abs ( $img ), 6) . "\n" ); } } // Driver Code printRoots(1); printRoots(2); printRoots(3); // This code is contributed by mits ?> |
Javascript
<script> // javascript program to print n'th roots of unity // This function receives an integer n , and prints // all the nth roots of unity function printRoots(n) { // theta = 2*pi/n var theta = (3.14*2/n); // print all nth roots with 6 significant digits for (k = 0; k < n; k++) { // calculate the real and imaginary part of root var real = Math.cos(k*theta); var img = Math.sin(k*theta); // Print real and imaginary parts document.write(real.toFixed(6)); if (img >= 0) document.write( " + i " ); else document.write( " - i " ); document.write(Math.abs(img).toFixed(6)+'<br> '); } } // Driver function to check the program printRoots(1); //document.write(' <br> '); printRoots(2); //document.write(' <br>'); printRoots(3); // This code is contributed by shikhasingrajput </script> |
Output:
1.000000 + i 0.000000 1.000000 + i 0.000000 -1.000000 + i 0.000000 1.000000 + i 0.000000 -0.500000 + i 0.866025 -0.500000 - i 0.866025
References: Wikipedia
This article is contributed by Ashutosh Kumar .If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Please Login to comment...