Seu trabalho é pegar os fatores primos de um número retirado da entrada (omitindo qualquer expoente igual a 1) e depois pegar os fatores primos de todos os expoentes e assim por diante, até que nenhum número composto permaneça; e depois produz o resultado.
Para deixar o que estou pedindo um pouco mais claro, aqui está um programa em javascript que faz isso, mas, com 782 bytes, ainda não está muito bem jogado:
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()));
Você deve deixar a ordem das operações o mais clara possível e classificar os principais fatores em ordem crescente em cada nível.
Você recebe um bônus de -50 bytes se você produzir a saída como impressão matemática formatada ou código de látex válido.
2^(5^11*11^(2^7))*541
).