あなたの仕事は、入力から取られた数値の素因数を取り(1に等しいすべての指数を省略)、次にすべての指数の素因数を取り、合成数がなくなるまで続けます。そして結果を出力します。
私が求めていることを少し明確にするために、これを行うjavascriptプログラムを次に示しますが、782バイトではまだ十分にゴルフされていません。
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()));
演算の順序をできるだけ明確にして、各レベルで素因数を昇順にソートする必要があります。
フォーマットされたmathprintまたは有効なlatexコードとして出力を生成すると、-50バイトのボーナスが得られます。
2^(5^11*11^(2^7))*541
。