Roots of Unity

01 Sep, 2021
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++
Java
Python3
C#
PHP
Javascript
// 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 unityvoid 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 programint main(){    printRoots(1);    cout << endl;    printRoots(2);    cout << endl;    printRoots(3);    return 0;}
// Java program to print n'th roots of unityimport java.io.*; class GFG { // This function receives an integer n , and prints// all the nth roots of unitystatic 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 programpublic static void main (String[] args){    printRoots(1);    //System.out.println();    printRoots(2);    //System.out.println();    printRoots(3);}}// This code is contributed by Raj
# Python3 program to print n'th roots of unity import math # This function receives an integer n , and prints# all the nth roots of unitydef 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 programif __name__=='__main__':    printRoots(1)    printRoots(2)    printRoots(3) # This code is contributed by# Sanjit_Prasad
// C# program to print n'th roots of unityusing System; class GFG { // This function receives an integer n , and prints// all the nth roots of unitystatic 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 programstatic void Main(){    printRoots(1);          printRoots(2);          printRoots(3);}}// This code is contributed by mits
<?php// PHP program to print n'th roots of unity // This function receives an integer n,// and prints all the nth roots of unityfunction 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 CodeprintRoots(1);printRoots(2);printRoots(3); // This code is contributed by mits?>
<script>// javascript program to print n'th roots of unity // This function receives an integer n , and prints// all the nth roots of unityfunction 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 programprintRoots(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. 
Sanjit_Prasad
R_Raj
Mithun Kumar
shikhasingrajput
surinderdawra388
simmytarika5
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
C++ Data Types
Write a program to print all permutations of a given string
Operators in C / C++
Modular multiplicative inverse
Modulo Operator (%) in C/C++ with Examples
Merge two sorted arrays
Print all possible combinations of r elements in a given array of size n
Find first and last digits of a number