在这一挑战中,我们学习了一种使用因子树对每个正整数进行编码的方法。
下面是它的工作原理:
空字符串的值为1。
(S)
其中S
是具有值的任何表达式小号计算结果为š个素数。AB
其中A
和B
是与值arbirary表达式甲和乙分别具有值A * B。
例如,如果我们想代表7,我们会做
7 -> (4) -> (2*2) -> ((1)(1)) -> (()())
事实证明,我们可以使用这种方法表示每个整数。实际上,我们可以用多种方式表示一些数字。因为乘法是可交换的10既是
((()))()
和
()((()))
同时,某些数字只能以一种方式表示。以8为例。8只能表示为
()()()
而且由于我们所有的原子都是相同的,所以我们不能使用可交换性来重组它们。
所以现在的问题是“哪个数字只能用一种方式表示?”。第一个观察是我刚刚开始回到那里的观察。似乎完美的力量具有一些特殊的性质。在进一步研究中,我们可以找到36,即6 2是一个完美的幂,但是具有多种表示形式。
(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())
这是有道理的,因为6已经可以重新排列,因此我们从6中得出的任何数字也必须可以重新排列。
现在我们有了一条规则:
- 如果数字是具有唯一表示形式的完美幂次,则该数字具有唯一表示形式。
该规则可以帮助我们减少确定一个复合数字是否唯一来确定质数是否唯一。现在我们有了该规则,我们想找出是什么使质数唯一。这实际上是不言而喻的。如果我们采用一个唯一的数字并将其括在括号中,则结果必须是唯一的,并且如果n具有多个表示形式,则结果相反;第n个素数必须具有多个表示形式。这产生了第二条规则:
- 当且仅当n是唯一的时,第n个素数才是唯一的。
这两个规则都是递归的,因此我们将需要一个基本案例。最小的唯一数字是多少?人们可能会说2,因为它的just ()
,但1(空字符串)更小并且是唯一的。
- 1是唯一的。
使用这三个规则,我们可以确定一个数字是否具有唯一的因子树。
任务
您可能已经看到了它的来临,但是您的任务是取一个正整数,并确定它是否唯一。您应该编写执行此计算的程序或函数。您应该输出两个可能的值之一,这些值由您决定,但是一个值应表示“是”,当输入是唯一的时输出,而另一个则表示“否”。
您的答案应以字节计分,较少的字节更好。
测试用例
以下是前几个唯一编号:
1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31
建议的测试用例
5381 -> Unique
看来OEIS A214577是某种程度上相关的,所以如果您需要更多的测试用例,请尝试一下,但我不知道它们是相同的,因此请您自担风险。