Let z
Ser um número complexo. z
é a enésima raiz primitiva da unidade, se para um determinado número inteiro positivo n
e para qualquer número inteiro positivo k < n
.
Desafio
Escreva um programa ou função completo que, dado um número inteiro positivo n
como entrada, produza todas as enésimas enésimas raízes primitivas da unidade. Você pode produzi-los na forma polar ( e^θi
ou e^iθ
, o argumento deve ser um decimal com pelo menos 2 casas decimais) ou retangular ( a + bi
ou uma forma semelhante, as partes reais e imaginárias também devem ser decimais) e podem ser exibidas na lista do seu idioma / array ou como uma sequência com os números separados por espaços ou novas linhas. Construções que calculam as enésimas raízes da unidade ou as enésimas raízes primitivas da unidade não são permitidas.
Isso é código-golfe , então o código mais curto em bytes vence.
Amostras de entradas e saídas
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
fonte
Respostas:
Geléia,
119 bytesObrigado a @Dennis por -2 bytes!
Eu queria gerar os números coprime para N dobrando a diferença definida sobre todas as raízes da unidade de 1 para N, mas não consegui descobrir como, então, usei o método de @ Dennis.
Experimente aqui. Válido nesta versão do Jelly, mas pode não estar nas versões após 1 de fevereiro de 2016.fonte
Gelatina , 14 bytes
Experimente online!
Como funciona
z = e 2tπi é um n ° de raiz de 1 , se e somente se t = k / n por algum número inteiro k .
z é primitivo se e somente se k e n são coprime.
fonte
Julia, 48 bytes
Esta é uma função lambda que aceita um número inteiro e retorna uma matriz de flutuadores complexos. Para chamá-lo, atribua-o a uma variável. Ele usa a mesma abordagem que a resposta de Dennis 'Jelly.
Ungolfed:
fonte
Ruby, 46 bytes
Esta é uma implementação que não é "linguagem de golfe" da resposta do Thomas Kwa Jelly.
Ungolfed:
fonte
MATL , 27 bytes
Usa a liberação (9.3.1) , que é anterior a esse desafio.
Experimente online!
(O compilador online usa uma versão mais recente, mas o código é executado na versão 9.3.1 e fornece o mesmo resultado)
Explicação
Existem três etapas principais:
0
,1
, ...,N-1
, correspondendo a todas as raízes.N
.Código:
fonte
Matlab 49 bytes
Não conseguiu a tarefa na primeira vez, mas agora aqui está. Saídas da seguinte forma:
fonte
ES6, 96 bytes
A forma polar foi a menor saída.
fonte
PARI / GP, 41 bytes
Bem simples: encontre os números de 1 a n que são coprime para n e, em seguida,
Tem que haver um caminho mais curto, mas este foi o melhor que pude encontrar.
fonte