どうにかして変数1個かつ1文で素因数分解をしたので、記録として、あと誰かの参考になれば、と思い、残しておきます。
レギュレーション
- 入力はprompt()、出力はalert()を用いること。(JavaScript以外で書く場合はそれに該当する関数を使うこと。)
- 使用できる変数は入力として受け取ったnumber型変数nのみ。ただし、nは必要に応じて再代入してよい。
-
for
やwhile
は、{}
を書かなくてよい(中身が1文しかない)のならば、使用してよい。 - 変数のスコープを使い、nという名前の別の変数を使うのはアウト。
- 当然、インライン関数はアウト。
- 1文としてみなせるのなら、何文字になっても構わないが、同じ処理を2度書いてはならない。
私の解
for(var n=parseInt(prompt()<<16);-65536&(n|="0".repeat(n>>16).match(/^(00+)\1+$/)?.[1]?.length);n<<=16)alert(((-65536&n)>>16)/(65535&n||1));
問題点は、32767までしか分解できないこと。
どうやって作られたか。
正規表現で素数判定ができるのは知っている方も多いと思う。
それを利用すれば、素因数分解の不必要なネストがいらなくなる。(処理は重くなるが。)
あとは、n
を上位16ビットと下位16ビットにわけて割り算しているだけ。
より良い解、改良案等お待ちしております。
以上。