7
再帰的な素因数分解
あなたの仕事は、入力から取られた数値の素因数を取り(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バイトのボーナスが得られます。