给定一个小整数n,最多打印6个有效数字的所有第n个单位根。我们基本上需要找到方程x n – 1的所有根。
例子:
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
如果任何复数提高到一定的幂时给出1,则称其为单位根。
整数的第n个根是任何复数,因此加到n的幂为1。
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
我们可以在这里使用De Moivre的公式,
( 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
利用以上事实,我们可以轻松地打印出所有的第n个统一根!
以下是相同的程序。
C++
// C++ program to print n'th roots of unity
#include
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= 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= 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 conributed 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= 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 conributed by mits
PHP
= 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
输出:
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