私の番号はユニークですか?

この課題では、因子ツリーを使ってすべての正の整数をエンコードする方法を学びました。

これはどのように動作するのです:

  • 空の文字列の値は1です。

  • (S) S は、 S の値が
    S > thプライム A および B は、
    A および B の値はそれぞれ A
    です。

たとえば、7を表すとしたら、

  7 -> (4) -> (2*2) -> ((1)(1)) -> (()())

このメソッドを使用して、すべての整数を表すことができます。実際にはいくつかの数字を複数の方法で表現することができます。乗法は可換であるため、両方とも

((()))()

そして

()((()))

同時に、いくつかの数字は1つの方法でしか表現することができません。たとえば、8を取る。 8は、

()()()

そして since all of our atoms are the same we can’t use
commutivity to reorganize them.


だから問題は「どの数字が1つの方法でしか表現できないのか?」です。最初の観察は私がちょうどそこに戻ることを始めたものです。完全な力はいくつかの特殊な性質を持っているようです。さらなる調査の下で、6
2 は完全な力であるが、複数の表現を有する36を見つけることができる。

(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())

そして this makes sense because 6 is already rearrangable, so
any number we make out of 6 must also be rearrangable.

だから今我々はルールを持っている:

  • 数字は、一意の表現を持つ数字の完全な威力であれば、一意的な表現をしています。

That rule can help us reduce determining if a composite
number is unique to determining if a prime number is unique. Now
that we have that rule we want to figure out what makes a
prime number unique. This is actually pretty self evident.
If we take a unique number そして wrap it in parentheses, the result
must be unique, そして, going the other way if n has
multiple representations the nth prime must have
multiple representations. This yields the second rule:

  • The nth prime is unique if そして only if
    n is unique.

Both of these rules are recursive, so we are going to need a
base case. What is the smallest unique number? One might be tempted
to say 2 because its just (), but 1, the empty string,
is even smaller そして is unique.

  • 1は一意です。

これらの3つのルールを使用すると、数値に固有の要素ツリーがあるかどうかを判断できます。

仕事

You may have seen it coming, but your 仕事 is to take a
positive integer, そして determine if it is unique. You should write
either a program or function that does this computation. You should
output one of two possible values, what these values are is up to
you but one should represent “yes”, being output when the input is
unique そして one should represent “no” being output
otherwise.

あなたの答えは、より良いバイト数でバイト単位で採点されるべきです。

テストケース

ここに最初のカップルのユニークな番号があります:

1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31

Suggested テストケース

5381 -> Unique

It seems that OEIS A214577 is somehow related, so if you need
more テストケース try there, but I don’t know they are the same so use at
your own risk.

ベストアンサー

Husk, 11 10 bytes

Zgarbに1バイトのおかげで保存されました!

Ωεo?oṗ←¬Ep

ユニークな場合は 1 を、それ以外の場合は 0 を返します

Try it online! Or
returning the first 50

説明:

Ωε              Until the result is small (either 1 or 0), we repeat the following
         p     Get the prime factors
  o?           If ...
        E      they are all equal:
    ȯṗ←           Get the index of the first one into the primes
               Else:
       ¬          Not the list (since non-empty lists are truthy, this returns 0)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です