Diberikan input bilangan bulat ≥ 2, mengeluarkan daftar pembagi yang diurutkan berdasarkan eksponen dalam faktorisasi utama mereka, dalam urutan naik, memesan pertama dengan prime terbesar, kemudian oleh terbesar kedua, dan seterusnya.
Sebagai contoh, ambil bilangan bulat 72, yaitu 2 3 3 2 . Ini memiliki pembagi
1 3^0 · 2^0
2 3^0 · 2^1
3 3^1 · 2^0
4 3^0 · 2^2
6 3^1 · 2^1
8 3^0 · 2^3
9 3^2 · 2^0
12 3^1 · 2^2
18 3^2 · 2^1
24 3^1 · 2^3
36 3^2 · 2^2
72 3^2 · 2^3
Ketika diurutkan dalam urutan menaik oleh eksponen pada faktor prima, dengan bilangan prima yang lebih besar yang diprioritaskan, ini menjadi
1 3^0 · 2^0
2 3^0 · 2^1
4 3^0 · 2^2
8 3^0 · 2^3
3 3^1 · 2^0
6 3^1 · 2^1
12 3^1 · 2^2
24 3^1 · 2^3
9 3^2 · 2^0
18 3^2 · 2^1
36 3^2 · 2^2
72 3^2 · 2^3
Perhatikan bahwa daftar ini disortir terlebih dahulu dengan urutan eksponen 3, dan kemudian oleh eksponen 2. Anda juga dapat menganggap ini sebagai bacaan dari kiri ke kanan dan atas ke bawah melintasi kisi-kisi berikut:
2^0 2^1 2^2 2^3
3^0 1 2 4 8
3^1 3 6 12 24
3^2 9 18 36 72
Kasus uji:
2 => 1 2
72 => 1 2 4 8 3 6 12 24 9 18 36 72
101 => 1 101
360 => 1 2 4 8 3 6 12 24 9 18 36 72 5 10 20 40 15 30 60 120 45 90 180 360
3780 => 1 2 4 3 6 12 9 18 36 27 54 108 5 10 20 15 30 60 45 90 180 135 270 540 7 14 28 21 42 84 63 126 252 189 378 756 35 70 140 105 210 420 315 630 1260 945 1890 3780
30030 => 1 2 3 6 5 10 15 30 7 14 21 42 35 70 105 210 11 22 33 66 55 110 165 330 77 154 231 462 385 770 1155 2310 13 26 39 78 65 130 195 390 91 182 273 546 455 910 1365 2730 143 286 429 858 715 1430 2145 4290 1001 2002 3003 6006 5005 10010 15015 30030
65536 => 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536
74088 => 1 2 4 8 3 6 12 24 9 18 36 72 27 54 108 216 7 14 28 56 21 42 84 168 63 126 252 504 189 378 756 1512 49 98 196 392 147 294 588 1176 441 882 1764 3528 1323 2646 5292 10584 343 686 1372 2744 1029 2058 4116 8232 3087 6174 12348 24696 9261 18522 37044 74088
Karena ini adalah kode-golf , kode terpendek dalam byte akan menang.
Jelly ,
87 byteCobalah online! Terima kasih kepada @ Dennis untuk -1 byte.
sumber
ÆDÆfU$Þ
(menggunakan sort-by Jelly baru), menyimpan satu byte.Pyth, 10 byte
Cobalah online: Demonstrasi
Sayangnya produk di atas daftar kosong tidak didefinisikan sebagai 1 dalam Pyth. Ini biaya tiga byte tambahan.
Penjelasan:
sumber
Jelly ,
1210 byte2 byte terima kasih kepada @ Sp3000.
Cobalah online!
Suite uji.
Kredit ke @ Sp3000 untuk muncul dengan format penjelasan.
sumber
Python 2, 85 byte
Tidak ada faktorisasi, tidak ada penyortiran. Implementasi rekursif yang sama panjangnya:
sumber
Sebenarnya, 19 byte
Cobalah online!
Penjelasan:
sumber
JavaScript, 78 byte
Berdasarkan ide @ xnor, walaupun saya tidak mengerti kodenya, jadi saya harus mengimplementasikannya kembali dari awal. Algoritma dasarnya adalah bahwa Anda mulai dengan [1] dan kalikan dengan [1, ..., pᵏ] untuk setiap pᵏ dalam factorisation utama n, meskipun karena saya tidak memiliki factorisation prima atau produk kartesius saya harus melakukannya semua secara rekursif. Contoh:
sumber
R, 196 byte
Ini akan menjadi tidak efisien sebagai heck karena saya tidak tahan godaan untuk menggunakan
library(primes)
. Ini menciptakan vektord
dari semua faktor utama input, menghitung frekuensinya (jumlah kejadian), dan kemudian menghitung produk kartesius dari semua kekuatan yang mungkin (dari 0 hingga frekuensi masing-masingb[i]
), yang digunakanprod
fungsi tersebut. Sial, kasus spesial 2 dan 3! Kalau tidak, ini adalah showcase yang bagus dari penanganan dataframe R dan fungsi vektor / operasi baris (dan bahkantable
fungsi statistik murni !).Tentu saja, efisiensinya dapat ditingkatkan dengan biaya 15 byte menggunakan
r=2:ceiling(sqrt(n))
, jika seseorang peduli. Berikut ini adalah versi tanpa bulu yang lebih baik:sumber
Mathematica 150 byte
sumber
Brachylog , 3 byte
Cobalah online!
Kode membaca kurang lebih sama seperti judul tantangan: "faktor-faktor input, diurutkan berdasarkan dekomposisi utama mereka". Memastikan bahwa kecantikan 3-byte ini benar-benar lulus uji kasus dengan hanya menggunakan pengertian bawaan Brachylog tentang cara menyortir daftar yang mengharuskan saya untuk menyalin dan menempelkan semua nomor itu ke Clojure REPL, di mana elemen daftar dipisahkan oleh spasi dan koma adalah spasi putih, tetapi ternyata memang berfungsi.
sumber
APL (Dyalog Extended) , 17 byte
Terima kasih banyak kepada ngn dan Adm atas bantuan mereka dalam bermain golf kedua program APL ini di The APL Orchard , tempat yang tepat untuk mempelajari APL dan mendapatkan bantuan APL.
Cobalah online!
Tidak melakukanolf
APL (Dyalog Unicode) , 29 byte SBCS
Cobalah online!
Tidak melakukanolf
sumber
J,
3231 byteRaih daftar bilangan prima dan eksponen integer input, balikkan masing-masing, dan susun pembagi darinya.
Pemakaian
Penjelasan
sumber
Ruby, 71 byte
Jawaban ini didasarkan pada jawaban Python 2 xnor.
Alternatif dengan panjang yang sama adalah:
Tidak melakukan pelanggaran:
sumber
Japt ,
129 byte-3 byte terima kasih kepada @Shaggy
Cobalah online!
sumber
Japt, 7 byte
Jalankan secara online
sumber
Mathematica, 56 byte
sumber