Su trabajo es tomar los factores primos de un número tomado de la entrada (omitiendo cualquier exponente igual a 1) y luego tomar los factores primos de todos los exponentes, y así sucesivamente, hasta que no queden números compuestos; y luego da salida al resultado.
Para aclarar un poco lo que pido, aquí hay un programa de JavaScript que lo hace, pero, a 782 bytes, todavía no está muy bien:
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()));
Debe establecer el orden de operaciones lo más claro posible y clasificar los factores primos en orden ascendente en cada nivel.
Obtiene una bonificación de -50 bytes si produce la salida como un formato matemático formateado o un código de látex válido.
2^(5^11*11^(2^7))*541
).