Membiarkan z
menjadi bilangan kompleks. z
adalah akar primitif kesatu jika untuk bilangan bulat positif tertentu n
dan untuk bilangan bulat positif k < n
.
Tantangan
Tulis sebuah program atau fungsi lengkap yang, diberi bilangan bulat positif n
sebagai input, mengeluarkan semua akar keaslian primitif. Anda dapat menampilkannya dalam bentuk kutub ( e^θi
atau e^iθ
, argumen harus berupa desimal dengan setidaknya 2 tempat desimal) atau bentuk persegi panjang ( a + bi
atau bentuk yang serupa, bagian nyata dan imajiner juga harus desimal), dan mereka dapat ditampilkan dalam daftar bahasa Anda / Format array atau sebagai string dengan angka yang dipisahkan oleh spasi atau baris baru. Built-in yang menghitung n akar persatuan atau akar n primitif persatuan tidak diperbolehkan.
Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
Input dan Output Sampel
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
sumber
Jawaban:
Jelly,
119 byteBerkat @Dennis untuk -2 byte!
Saya ingin menghasilkan angka coprime ke N dengan melipat set perbedaan pada semua akar persatuan dari 1 ke N, tetapi saya tidak tahu bagaimana saya menggunakan metode @ Dennis.
Coba di sini. Berlaku dalam versi Jelly ini, tetapi mungkin tidak dalam versi setelah 1 Februari 2016.sumber
Jelly , 14 byte
Cobalah online!
Bagaimana itu bekerja
z = e 2tπi adalah n th akar 1 jika dan hanya jika t = k / n untuk beberapa bilangan bulat k .
z adalah primitif jika dan hanya jika k dan n adalah koprime.
sumber
Julia, 48 byte
Ini adalah fungsi lambda yang menerima integer dan mengembalikan array float kompleks. Untuk menyebutnya, tetapkan ke variabel. Ini menggunakan pendekatan yang sama dengan jawaban Dennis 'Jelly.
Tidak Disatukan:
sumber
Ruby, 46 byte
Ini adalah implementasi non-"golfing language" dari jawaban Jelly Thomas Kwa .
Tidak Disatukan:
sumber
MATL , 27 byte
Menggunakan rilis (9.3.1) , yang lebih awal dari tantangan ini.
Cobalah online!
(Kompilator online menggunakan rilis yang lebih baru, tetapi kode berjalan di rilis 9.3.1 dan memberikan hasil yang sama)
Penjelasan
Ada tiga langkah utama:
0
,,1
...N-1
,, sesuai dengan semua root.N
.Kode:
sumber
Matlab 49 byte
Tidak mendapatkan tugas pada saat pertama, tetapi sekarang ini dia. Output sebagai berikut:
sumber
ES6, 96 byte
Bentuk kutub adalah keluaran terpendek.
sumber
PARI / GP, 41 byte
Cukup mudah: cari angka dari 1 hingga n yang merupakan koprime ke n, lalu
Pasti ada cara yang lebih singkat, tetapi ini adalah yang terbaik yang bisa saya temukan.
sumber