で、この課題我々は要因の木を使用して整数すべての正をエンコードする方法を学びました。
仕組みは次のとおりです。
空の文字列の値は1です。
(S)
ここS
で、値がSの式は、S番目の素数に評価されます。AB
ここでA
およびB
は、それぞれAおよびBの値を持つ任意の式の値はA * Bです。
たとえば、7を表す場合は、次のようにします。
7 -> (4) -> (2*2) -> ((1)(1)) -> (()())
この方法を使用すると、すべての整数を表すことができます。実際、いくつかの数値は複数の方法で表すことができます。乗算は可換であるため、10は両方
((()))()
そして
()((()))
同時に、いくつかの数値は1つの方法でしか表現できません。例として8を取り上げます。8は次のようにしか表現できません
()()()
そして、私たちの原子はすべて同じなので、commutivityを使用して原子を再編成することはできません。
それで、今の質問は「どの数字が一方向でしか表現できないのか?」です。最初の観察は、私がそこに戻り始めたばかりのものです。完全な力にはいくつかの特別な特性があるようです。さらに調査すると、36を見つけることができます。これは6 2が完全な力ですが、複数の表現があります。
(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())
また、6はすでに再配置可能であるため、これは理にかなっています。したがって、6から作成する数も再配置可能でなければなりません。
これでルールができました:
- 数値は、一意の表現を持つ数値の完全な力である場合、一意の表現を持ちます。
この規則は、素数が一意であるかどうかを判断するために、合成数が一意であるかどうかの判断を減らすのに役立ちます。この規則ができたので、何が素数を一意にするのかを理解したいと思います。これは実際にはかなり自明です。一意の番号を取得して括弧で囲む場合、結果は一意である必要があります。逆に、nに複数の表現がある場合、n番目の素数には複数の表現が必要です。これにより、2番目のルールが生成されます。
- N番目の素数をしている場合にのみ場合は一意であるnがユニークです。
これらのルールは両方とも再帰的であるため、ベースケースが必要になります。最小の一意の番号は何ですか?()
空の文字列である1 だけがさらに小さく、一意であるため、2と言いたくなるかもしれません。
- 1は一意です。
これらの3つのルールを使用して、数値に一意の因子ツリーがあるかどうかを判断できます。
仕事
あなたはそれが来るのを見たかもしれませんが、あなたの仕事は正の整数を取り、それが一意であるかどうかを判断することです。この計算を行うプログラムまたは関数を作成する必要があります。2つの可能な値のいずれかを出力する必要があります。これらの値は自由ですが、入力が一意の場合は「yes」を、そうでない場合は「no」を出力する必要があります。
回答はバイト単位でスコアリングする必要があり、バイト数は少ない方が良いでしょう。
テストケース
最初のカップルの一意の番号は次のとおりです。
1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31
推奨テストケース
5381 -> Unique
と思われOEIS A214577が何らかの形で関係している、あなたはそこにしようと、私は、彼らはあなた自身の責任で同じように使用されているかわからない複数のテストケースを必要とするので、場合。