0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

1変数素因数分解

Last updated at Posted at 2023-10-25

どうにかして変数1個かつ1文で素因数分解をしたので、記録として、あと誰かの参考になれば、と思い、残しておきます。

レギュレーション

  • 入力はprompt()、出力はalert()を用いること。(JavaScript以外で書く場合はそれに該当する関数を使うこと。)
  • 使用できる変数は入力として受け取ったnumber型変数nのみ。ただし、nは必要に応じて再代入してよい。
  • forwhileは、{}を書かなくてよい(中身が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ビットにわけて割り算しているだけ。

より良い解、改良案等お待ちしております。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?