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
).