Roots of unity: Difference between revisions

(Add Factor)
Line 1,361:
(inc 'Angle (*/ 2 pi N)) )
(prinl) ) )</lang>
 
=={{header|Prolog}}==
Solves the roots of unity symbolically, as complex powers of e.
<lang Prolog>
roots(N, Rs) :-
succ(Pn, N), numlist(0, Pn, Ks),
maplist(root(N), Ks, Rs).
 
root(N, M, R2) :-
R0 is (2*M) rdiv N, % multiple of PI
(R0 > 1 -> R1 is R0 - 2; R1 = R0), % adjust for principal values
cis(R1, R2).
 
cis(0, 1) :- !.
cis(1, -1) :- !.
cis(1 rdiv 2, i) :- !.
cis(-1 rdiv 2, -i) :- !.
cis(-1 rdiv Q, exp(-i*pi/Q)) :- !.
cis(1 rdiv Q, exp(i*pi/Q)) :- !.
cis(P rdiv Q, exp(P*i*pi/Q)).
</lang>
{{Out}}
<pre>
?- roots(2,X).
X = [1, -1].
 
?- roots(3,X).
X = [1, exp(2*i*pi/3), exp(-2*i*pi/3)].
 
?- roots(4,X).
X = [1, i, -1, -i].
 
?- roots(5,X).
X = [1, exp(2*i*pi/5), exp(4*i*pi/5), exp(-4*i*pi/5), exp(-2*i*pi/5)].
 
?- roots(8,X), forall(member(A,X), format("~w~n", A)).
1
exp(i*pi/4)
i
exp(3*i*pi/4)
-1
exp(-3*i*pi/4)
-i
exp(-i*pi/4)
X = [1, exp(i*pi/4), i, exp(3*i*pi/4), -1, exp(... * ... * pi/4), -i, exp(... / ...)].
</pre>
 
=={{header|PureBasic}}==
357

edits