Dalam tugas ini, Anda harus menulis sebuah program, yang menghitung faktor prima dari sebuah angka. Masukan adalah bilangan asli 1 <n <2 ^ 32. Outputnya adalah daftar faktor prima dari angka dalam format berikut. Eksponen harus dihilangkan jika mereka 1. Hanya menampilkan bilangan prima. (Dengan asumsi input adalah 131784):
131784 = 2 ^ 3 * 3 * 17 ^ 2 * 19
Tidak perlu menggunakan jumlah spasi yang sama; spasi putih dapat dimasukkan di mana saja sesuai kebutuhan. Program Anda harus selesai dalam waktu kurang dari 10 menit untuk setiap input. Program dengan jumlah karakter terpendek akan menang.
code-golf
number-theory
primes
factoring
FUZxxl
sumber
sumber
Jawaban:
SageMath, 31 Bytes
Uji kasus:
83891573479027823458394579234582347590825792034579235923475902312344444
Keluaran:83891573479027823458394579234582347590825792034579235923475902312344444 = 2^2 * 3^2 * 89395597 * 98966790508447596609239 * 263396636003096040031295425789508274613
sumber
Ruby 1.9,
7470 karakterSuntingan:
exponent > 1
sumber
Perl 5.10, 73
88Mengambil nomor input dari input standar. Akan menghitung faktor untuk beberapa input jika disediakan.
Dihitung sebagai perbedaan
perl -e
. 5,10 diperlukan untuk\K
metacharacter regex.sumber
factor
.p
pilihan?split/\D/,~factor $_~;$_="@_";
Anda bisa menulis$_=~factor $_~;s/\D/ /g;
? (Tentu saja ganti~
dengan backtick.)$_=`factor $_`;s/\D/ /g;
? Membungkus backtick ganda membantu.OCaml, 201 karakter
Terjemahan imperatif langsung dari kode Python terbaik:
Sebagai contoh,
(perhatikan bahwa saya telah menghilangkan keluaran endline akhir.) Hanya untuk bersenang-senang, pada 213 karakter, versi
murnifungsional, dikaburkan secara menyeluruh melalui penggunaan liberal operator:sumber
Python,
140135133 karaktersumber
' * %d'
... Dan dua hal lagi:65536 == 4**8
; Jalur 7:if e:s+='*%d'%f+'^%d'%e*(e>1)
J, 72
Khas J. Dua karakter untuk melakukan sebagian besar pekerjaan, enam puluh karakter untuk menyajikannya.
Sunting: Memperbaiki jumlah karakter.
sumber
161784
adalah input Anda, itu masih 72 karakter.|: __ q: y
?J,
5352 karakterSolusi ini mengambil
rplc
trik dari solusi randomra tetapi muncul dengan beberapa ide orisinal juga.Dalam notasi diam-diam, fungsi ini menjadi
dimana
g
didefinisikan sebagaiq: y
adalah vektor faktor prima dariy
. Misalnya,q: 60
hasil2 2 3 5
.x u/. y
berlakuu
untuky
dikunci olehx
, yaitu,u
diterapkan pada vektor elemeny
yang entri dalamx
adalah sama. Ini agak rumit untuk dijelaskan, tetapi dalam kasus khususy u/. y
atauu/.~ y
,u
diterapkan pada setiap vektor elemen yang berbeday
, di mana setiap elemen diulangi sesering seperti yang terlihat diy
. Misalnya,</.~ 1 2 1 2 3 1 2 2 3
hasil# y
adalah penghitungan dariy
, yaitu, jumlah item dalamy
.": y
formaty
sebagai string.x , y
menambahkanx
dany
.{. y
adalah kepalay
, yaitu, item pertama.(": {. y), '^' , (": # y) , '*'
memformat vektor n pengulangan angka k menjadi string bentuk k ^ n *. Frasa ini dalam notasi diam-diam adalah:@{.,'^','*',~":@#
, yang kami sampaikan ke keterangan yang/.
dijelaskan lebih lanjut di atas.x rplc y
adalah fungsi perpustakaan menggantikan karakter.y
memiliki bentuka ; b
dan setiap contoh stringa
dix
digantikan olehb
.x
diratakan (yaitu, dibentuk kembali sedemikian rupa sehingga memiliki peringkat 1) sebelum operasi berlangsung, yang digunakan di sini. Kode ini menggantikan^1*
dengan*
untuk mematuhi format output yang diamanatkan.}: y
adalah batasan dariy
, yaitu, semua kecuali item terakhirnya. Ini digunakan untuk menghapus trailing*
.sumber
__ q:
? Cobalah online!PHP, 112
118
sumber
Python 119 Chars
sumber
JavaScript,
124122119sumber
Perl, 78
Ia menggunakan fitur s ///r dari Perl 5.14 untuk menghilangkan ^ 1s. 81 karakter untuk dijalankan dalam satu lingkaran:
sumber
PHP, 236 karakter
Output untuk 131784: 2 ^ 3 * 3 * 17 ^ 2 * 19
Menyelesaikan semua angka dalam beberapa detik saat pengujian.
Input tidak pernah ditentukan, jadi saya memilih untuk menyebutnya menggunakan argumen baris perintah.
sumber
Scala 374:
ungolfed:
sumber
J, 74 karakter
64 karakter dengan input dalam variabel
x
:sumber
3 : 0
definisi.3 : 0
tidak terhapuskan dalam versi tetapi tidak berhasil. Saya mungkin mencoba diam-diam nanti. Ini adalah 3: 0 yang saya coba: pastebin.com/rmTVAk4j .y
Anda seperti yang seharusnya?''
alih-aliha:
di satu tempat. Mungkin itu bedanya?Java 10,
109108 byte (fungsi lambda) (tidak bersaing berdasarkan permintaan OP)Cobalah online.
Java 6+, 181 byte (program lengkap)
Cobalah online.
-1 byte terima kasih kepada @ceilingcat .
Penjelasan:
sumber
Japt ,
282726 byte-1 byte terima kasih kepada Shaggy
Cobalah
sumber
Powershell,
11397 byteTerinspirasi oleh jawaban Joey . Ini lambat tapi pendek.
Script tes yang dijelaskan:
Keluaran:
sumber
Jelly , 16 byte (tidak bersaing berdasarkan permintaan OP)
Salah satu jawaban Jelly pertama saya, jadi pasti bisa bermain golf (terutama
³”=³
) ..Cobalah online.
Penjelasan:
sumber
(non-competing)
. :)05AB1E ,
2220 byte (tidak bersaing berdasarkan permintaan OP)-2 byte terima kasih kepada @Emigna .
Cobalah online.
Penjelasan:
sumber
1K
harus bekerja alih-alih `≠ iy di loop.APL (NARS), 66 karakter, 132 byte
tes dan komentar:
jika seseorang memiliki banyak waktu dengan primitif ini, kenal mereka dengan baik mereka, bagi saya ada kemungkinan bahwa kode lebih jelas dari komentar ... jadi kode lebih jelas daripada komentar, komentar tidak berguna ...
sumber
JavaScript, 107
120
sumber
*
jejak dalam output dan mencetak eksponen bahkan jika itu 1.*
menganggap mengalikan oleh1
. Jika itu masalah besar, saya akan memperbaikinya.1
tidak boleh dicetak. Dan tidak, trailing*
juga menentang itu. Jika seseorang dapat memilih format output yang bebas, makafactor(1)
membayar adalah yang termudah. Jawaban hanya dapat dibandingkan secara wajar jika mereka semua memecahkan masalah yang sama.PHP , 112 byte
Cobalah online!
sumber
PHP, 93 byte
Saya bisa melakukan 89 byte dengan PHP 5.5 (atau lebih baru), tetapi itu lebih dari 2 tahun setelah tantangan:
Jalankan sebagai pipa dengan
-nF
atau coba online .sumber