我的号码是唯一的吗


21

这一挑战中,我们学习了一种使用因子树对每个正整数进行编码的方法。

下面是它的工作原理:

  • 空字符串的值为1。

  • (S)其中S是具有值的任何表达式小号计算结果为š个素数。

  • AB其中AB是与值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是某种程度上相关的,所以如果您需要更多的测试用例,请尝试一下,但我不知道它们是相同的,因此请您自担风险。


我认为主要因素必须排序,但无论如何。
妮莎(Nissa)

1
@JonathanAllan不,全在这里。
妮莎(Nissa)

建议的测试用例:5381
Nissa

@StephenLeppik添加了测试用例,谢谢。
小麦巫师

1
@ H.PWiz我要说的是,完整的程序可能会作为输出错误,因为这是程序的一种输出形式,但是函数必须返回一个值。
小麦巫师

Answers:


9

外壳11个10字节

感谢Zgarb,节省了一个字节!

Ωεo?oṗ←¬Ep

返回1唯一值,0否则返回

在线尝试!返回前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)

哦,您的解释为“ ȯp←”。
Erik the Outgolfer '17

@EriktheOutgolfer固定好成绩
H.PWiz

我认为ṁ¬可能只是¬因为该分支中的列表必须为非空。
Zgarb

@Zgarb哦,真是的,我想您之前给过我这个小费
H.PWiz

7

果冻,10 字节

经过很多摆弄!

ÆET0ṪḊ?µl¿

一个单数链接,取一个正整数,如果不1唯一0则返回。

在线尝试!

怎么样?

ÆET0ṪḊ?µl¿ - Link: number, n     e.g. 11          or 13            or 20
         ¿ - while:
        l  - ...condition: (left) logarithm with base (right)
           -               note: x log 0 and x log 1 both yield None, which is falsey
       µ   - ...do the monadic chain: (first pass shown)
ÆE         -   prime exponent array   [0,0,0,0,1]    [0,0,0,0,0,1]    [2,0,1]
  T        -   truthy indexes         [5]            [6]              [1,3]
      ?    -   if:
     Ḋ     -   ...condition: dequeue (i.e. if length > 1)
   0       -   ...then: literal zero   -              -               0
    Ṫ      -   ...else: tail           5              6               -
           - end result                1              0               0

等一下,对数,什么?

让我们来看一下循环的一些示例。

如果n=3131 1,第十一个素数):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |       31 |        31 |    1.000 -> continue
         2 |       11 |        31 |    0.698 -> continue
         3 |        5 |        11 |    0.671 -> continue
         4 |        3 |         5 |    0.683 -> continue
         5 |        2 |         3 |    0.631 -> continue
         6 |        1 |         2 |    0.000 -> stop, yielding left = 1

如果n=6255 4):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      625 |       625 |    1.000 -> continue
         2 |        3 |       625 |    0.171 -> continue
         3 |        2 |         3 |    0.631 -> continue
         4 |        1 |         2 |    0.000 -> stop, yielding left = 1

如果n=2255 2 ×3 2):

log test # |  left, x |  right, b |  x log b
-----------+----------+-----------+----------
         1 |      225 |       225 |    1.000 -> continue
         2 |     *  0 |       225 |-inf+nanj -> continue
         3 |     ** 0 |         0 |     None -> stop, yielding left = 0

*The dequeued list was not empty
**Tailing an empty list in Jelly yields 0

4

APL(Dyalog),42字节

CY'dfns'
{1≥⍵:11=≢∪r3pco⍵:∇11pcor0}

在tio上⎕CY'dfns'dfnses结合使用不太可行。


我的答案就出来了神似你,虽然,我没有写的第一个版本大约4个小时前
H.PWiz

@ H.PWiz看起来很不错,当人们以相同的语言提交时,我并不在乎,尽管我通常更愿意在找到更短的解决方案时发表评论,但这几乎是相同的。我不介意您保留它,但是我发现看起来同样没用的答案。关于计时-这就是它的工作原理。我放弃了几十个答案,因为其他人排在第一位。我(我相信其余的人)这样做是为了娱乐,而不是真正的竞争。
Uriel's

抱歉,花了这么长时间解决了问题,但我删除了答案。回顾过去,发表评论似乎更合适。我认为,由于当时我
还不熟悉


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.