Tugas Anda adalah mengambil faktor prima dari angka yang diambil dari input (menghilangkan eksponen yang sama dengan 1) kemudian mengambil faktor prima dari semua eksponen, dan seterusnya, hingga tidak ada angka komposit yang tersisa; dan kemudian menampilkan hasilnya.
Untuk membuat apa yang saya tanyakan sedikit lebih jelas, berikut ini adalah program javascript yang melakukannya, tetapi, pada 782 byte, ini belum golf dengan baik:
var primes=[2,3];
function nextPrime(){
var n=2;
while(isAMultipleOfAKnownPrime(n)){n++}
primes.push(n);
}
function isAKnownPrime(n){return primes.indexOf(n)!=-1};
function isAMultipleOfAKnownPrime(n){
for(var i=0;i<primes.length;i++)if(n%primes[i]==0)return true;
return false;
}
function primeFactorize(n){
while(primes[primes.length-1]<n)nextPrime();
if(isAKnownPrime(n)||n==1)return n;
var q=[];while(q.length<=n)q.push(0);
while(n!=1){
for(var i=0;i<primes.length;i++){
var x=primes[i];
if(n%x==0){q[x]++;n/=x}
}
}
var o="";
for(var i=2;i<q.length;i++){
if(q[i]){if(o)o+="x";o+=i;if(q[i]>1){o+="^("+primeFactorize(q[i])+")"}}
}
return o;
}
alert(primeFactorize(+prompt()));
Anda harus membuat urutan operasi sejelas mungkin, dan mengurutkan faktor utama dalam urutan naik pada setiap level.
Anda mendapatkan bonus -50 byte jika Anda menghasilkan output sebagai matematika yang diformat atau kode lateks yang valid.
2^(5^11*11^(2^7))*541
).Jawaban:
CJam,
3231292725 - 50 = -25 byte7 byte disimpan oleh Dennis.
Woooo, Dennis mengurangi ini dengan tujuh byte yang luar biasa dan berhasil mengalahkan Pyth!
Uji di sini.
Penjelasan
Semua isi tumpukan itu akan dicetak secara otomatis kembali-ke-belakang di akhir program.
sumber
"{}"
->{}s
Sepertinya Anda sudah menemukan caraj
kerjanya.j
untuk sementara waktu. user23013 memposting penjelasan yang bagus tentang Konversi Basis Campuran, dan aditsu beberapa pernyataan klarifikasi untuk penggunaan lanjutan di suatu tempat di SourceForge.j
cukup keren, fungsi bernama akan lebih pendek di sini:{mF{)_({Fa+'^}&*}%'**{}s\*}:F
q~S2*{mF{~'^'{@j'}'*}/;}j
Pyth, 27 - 50 = -23 byte
Ini mendefinisikan fungsi rekursif
y
. Cobalah online: PeragaanOutputnya adalah kode LaTeX yang valid, jadi saya mengklaim bonus. Panggilan
y66430125
mengembalikan string3^{2^{2}*3}*5^{3}
, yang dirender menjadiCukup bangga karena menemukan cara untuk mencetak kurung keriting tanpa menggunakan kurung keriting dalam kode saya.
Penjelasan:
sumber
repr(H)
triknya, tidak masalah. Jadi saya mengeditnya sekarang.{}
adalah kamus kosong di Python, bukan set kosong.Pyth -
39343228 byteTerima kasih Jakube
Menentukan fungsi
y
yang mengambil integer:Penjelasan:
Jika
^(1)
tidak diizinkan, saya harus menggunakan 33 byte:sumber
Mathematica,
106102101 - 50 = 51 byteFormat sebagai eksponen bersarang dengan multiplikasi titik. Representasi Unicode contoh input dan output:
10
→2 · 5
120
→2³ · 3 · 5
16384
→2²˙⁷
sumber
CenterDot
untuk menghindariTimes
. Saya masih mencoba mencari tahu di mana rekursi terjadi.#0
mengacu pada fungsi murni terdalam tanpa nama argumen.#
Bash + coreutils + bsdgames, 117 - 50 = 67
Keluaran
Saya mengklaim bonus -50, karena output ini diformat LaTeX dan dengan alat seperti http://www.sciweavers.org/free-online-latex-equation-editor menjadikan:
Beri tahu saya jika ini tidak dapat diterima.
sumber
Klip ,
3633Penjelasan
sumber
Javascript, 388-50 = 338
Karena kode LaTeX sekarang memenuhi syarat untuk bonus, saya memutuskan untuk memasukkan modifikasi yang diperlukan sebagai bagian dari golf untuk ini. Mungkin masih bisa bermain golf lebih lanjut.
sumber