Sei z
eine komplexe Zahl. z
ist eine n-te primitive Wurzel der Einheit, wenn für eine bestimmte positive ganze Zahl n
und für jede positive ganze Zahl k < n
.
Herausforderung
Schreiben Sie ein vollständiges Programm oder eine vollständige Funktion, die bei einer positiven Ganzzahl n
als Eingabe alle n-ten primitiven Wurzeln der Einheit ausgibt. Sie können sie in polarer Form ausgeben ( e^θi
oder das e^iθ
Argument sollte eine Dezimalzahl mit mindestens 2 Dezimalstellen sein) oder in rechteckiger Form ( a + bi
oder in ähnlicher Form sollten Real- und Imaginärteile auch Dezimalstellen sein), und sie können in der Liste Ihrer Sprache ausgegeben werden / Array-Format oder als Zeichenfolge, wobei die Zahlen durch Leerzeichen oder Zeilenumbrüche getrennt sind. Eingebaute, die die n-ten Wurzeln der Einheit oder die n-ten primitiven Wurzeln der Einheit berechnen, sind nicht zulässig.
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Beispiel für Ein- und Ausgänge
6 -> e^1.05i, e^-1.05i # polar form
3 -> e^2.094395i, e^-2.094395i # any number of decimal places is OK as long as there are more than 2
8 -> 0.707 + 0.707i, 0.707 - 0.707i, -0.707 + 0.707i, -0.707 - 0.707i # rectangular form
1 -> 1 + 0i # this is OK
1 -> 1 # this is also OK
4 -> 0 + i, 0 - i # this is OK
4 -> i, -i # this is also OK
quelle
Antworten:
Gelee,
119 BytesDanke an @Dennis für -2 Bytes!
Ich wollte die Zahlen koprime zu N erzeugen, indem ich die Mengenunterschiede über alle Wurzeln der Einheit von 1 nach N faltete, aber ich konnte nicht herausfinden, wie ich die Methode von @ Dennis verwendete.
Probieren Sie es hier aus. Gültig in dieser Version von Jelly, jedoch möglicherweise nicht in Versionen nach dem 1. Februar 2016.quelle
Gelee , 14 Bytes
Probieren Sie es online aus!
Wie es funktioniert
z = e 2tπi ist genau dann eine n- te Wurzel von 1, wenn t = k / n für eine ganze Zahl k ist .
z ist genau dann primitiv, wenn k und n Koprime sind.
quelle
Julia, 48 Bytes
Dies ist eine Lambda-Funktion, die eine Ganzzahl akzeptiert und ein Array komplexer Floats zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu. Es verwendet den gleichen Ansatz wie Dennis 'Jelly-Antwort.
Ungolfed:
quelle
Ruby, 46 Bytes
Dies ist eine nicht "Golfsprache" Implementierung von Thomas Kwas Jelly Antwort.
Ungolfed:
quelle
MATL , 27 Bytes
Verwendet Release (9.3.1) , das früher als diese Herausforderung ist.
Probieren Sie es online aus!
(Der Online-Compiler verwendet eine neuere Version, aber der Code wird in Version 9.3.1 ausgeführt und liefert das gleiche Ergebnis.)
Erläuterung
Es gibt drei Hauptschritte:
0
,1
, ...,N-1
an alle Wurzeln entspricht.N
.Code:
quelle
Matlab 49 Bytes
Ich habe die Aufgabe beim ersten Mal nicht bekommen, aber jetzt ist sie da. Ausgaben wie folgt:
quelle
ES6, 96 Bytes
Die polare Form war die kürzeste Ausgabe.
quelle
PARI / GP, 41 Bytes
Ziemlich einfach: Finden Sie dann die Zahlen von 1 bis n, die koprime zu n sind
Es muss einen kürzeren Weg geben, aber das war der beste, den ich finden konnte.
quelle