主要收容编号(高尔夫球版)


21

这是序列A054261

n个素数包含数是包含前素数作为子串的最小数。例如,数字是最低的数字,其中包含前3个素数作为子字符串,使其成为第3个素数包含数。n235

这是微不足道弄清楚前四个遏制素数是,,和,但随后变得更有趣。由于下一个素数是11,所以下一个素数包含数不是,而是因为它被定义为具有该属性的最小数。2232352357235711112357

但是,当您超过11时,真正的挑战就来了。下一个主要收容编号为。请注意,在此数字中,子字符串和 是重叠的。该数字也与数字重叠。1132571113313

很容易证明此序列在增加,因为下一个数字需要满足该数字之前的所有条件,并且还要有一个子字符串。但是,该序列并不严格增加,如n=10和结果所示n=11

输入项

一个整数n>0(我想您也可以将它的索引设为0,然后设为n>=0

输出量

无论是n个素数遏制,或包含第一清单n素遏制号码。

到目前为止,我发现的数字是:

 1 =>             2
 2 =>            23
 3 =>           235
 4 =>          2357
 5 =>        112357
 6 =>        113257
 7 =>       1131725
 8 =>     113171925
 9 =>    1131719235
10 =>  113171923295
11 =>  113171923295
12 => 1131719237295

请注意,n = 10n = 11是相同的数字,因为是包含所有数字的最低数字,但它也包含。113171923295[2,3,5,7,11,13,17,19,23,29]31

由于这是标记为高尔夫的代码,因此开始高尔夫吧!允许使用蛮力解,但是您的代码必须能够在理论上适用于任何输入(这意味着您不能仅将前n个素数连接在一起)。打高尔夫球快乐!

Answers:


11

05AB1E,8个字节

∞.ΔIÅpåP

在线尝试!

说明

           # from
∞          # a list of infinite positive integers
 .Δ        # find the first which satisfies the condition:
       P   # all
   IÅp     # of the first <input> prime numbers
      å    # are contained in the number

P运算符是否创建显式映射以检查数字中的素数(而不是检查数字是否在素数数组中)?这是一个很好的解决方案,我怀疑您可以使用更少的命令来实现任何解决方案。
maxb

@maxb P是产品。它基本上将列表中的所有值相乘。该Åp会创建第一个列表n量的素数,这里n是输入I在这种情况下。该å会检查每个号码在素数的这份名单,如果他们是在无限的列表,它会给出当前数量1为truthy和0对falsey。因此,产品基本上会检查所有内容是否真实;如果所有素数都在当前数字内。如果任何一个为0,则P结果也为false。但是如果全部为1,则P结果为true,并且-loop停止。
凯文·克鲁伊森

@KevinCruijssen我明白了,谢谢你的解释!
maxb

1
使用新版本的解决方案非常好!我也有8个字节,但是在旧版本的05AB1E:中1µNIÅpåP。对于那些不了解05AB1E的人,也对我的解释:–直到计数器变量达到1(它从0开始,N逐渐增加1并执行:NIÅpåP–检查是否所有第一个<input>素数都出现在N和如果是的话,会自动增加计数器变量返回N的最终值。
Xcoder先生

@ Mr.Xcoder:实际上,这也是我的第一个版本(因为原因X而不是而不是1),但是由于我之前从未有过使用的机会,所以我改用了这个版本:)
Emigna

5

果冻,11字节

³ÆN€ẇ€µẠ$1#

在线尝试!

简单的蛮力。#无法完全确定ar的工作原理,因此可能还有一些改进的空间。

怎么运行的

³ÆN€ẇ€µẠ$1#    Main link. Input: Index n.
         1#    Find the first natural number N that satisfies:
³ÆN€             First n primes...
    ẇ€           ...are substrings of N
      µẠ$        All of them are true

可以使用“在有条件的过滤器下固定”代替“对所有人都适用的条件”。
user202729 '18

2
wⱮẠ¥1#ÆN€保存两个字节。
丹尼斯

5

Java 8,143字节

n->{int r=1,f=1,c,i,j,k;for(;f>0;r++)for(i=2,f=c=n;c>0;c-=j>1?1+0*(f-=(r+"").contains(j+"")?1:0):0)for(j=i++,k=2;k<j;)j=j%k++<1?0:j;return~-r;}

在线尝试。
笔记:

  1. 超时以上n=7
  2. 如果有足够的时间和资源,它只能最多的n=9,由于尺寸限制int(最大的2,147,483,647)。
    • 随着+4个字节将更int改为along,最大值增加到下面的输出9,223,372,036,854,775,807(大约n=20我认为呢?)
    • 通过使用java.math.BigInteger最大值,可以将其增加到任何大小(理论上),但是至少由于java.math.BigInteger的方法的冗长,它将增加约200个字节。

说明:

n->{                   // Method with integer as both parameter and return-type
  int r=1,             //  Result-integer, starting at 1
      f=1,             //  Flag-integer, starting at 1 as well
      c,               //  Counter-integer, starting uninitialized
      i,j,k;           //  Index integers
  for(;f>0;            //  Loop as long as the flag is not 0 yet
      r++)             //    After every iteration, increase the result by 1
    for(i=2,           //   Reset `i` to 2
        f=c=n;         //   Reset both `f` and `c` to the input `n`
        c>0;           //   Inner loop as long as the counter is not 0 yet
        c-=            //     After every iteration, decrease the counter by:
           j>1?        //      If `j` is a prime:
            1          //       Decrease the counter by 1
            +0*(f-=    //       And also decrease the flag by:
                   (r+"").contains(j+"")?
                       //        If the result `r` contains the prime `j` as substring
                    1  //         Decrease the flag by 1
                   :   //        Else:
                    0) //         Leave the flag the same
           :           //      Else:
            0)         //       Leave the counter the same
      for(j=i++,       //    Set `j` to the current `i`,
                       //    (and increase `i` by 1 afterwards with `i++`)
          k=2;         //    Set `k` to 2 (the first prime)
          k<j;)        //    Inner loop as long as `k` is smaller than `j`
        j=j%k++<1?     //     If `j` is divisible by `k`
           0           //      Set `j` to 0
          :            //     Else:
           j;          //      Leave `j` the same
                       //    (If `j` is unchanged after this inner-most loop,
                       //     it means `j` is a prime)
  return~-r;}          //  Return `r-1` as result

5

JavaScript(ES6), 105 ... 92  91字节

n=>(k=1,g=(s,d=k++)=>n?k%d--?g(s,d):g(d?s:s+`-!/${n--,k}/.test(n)`):eval(s+';)++n'))`for(;`

在线尝试!

怎么样?

n

"-!/2/.test(n)-!/3/.test(n)-!/5/.test(n)-!/7/.test(n)-!/11/.test(n)..."

n

eval('for(;' + <conditions> + ';)++n')

已评论

n => (                             // main function taking n
  k = 1,                           // k = current prime candidate, initialized to 1
  g = (s,                          // g = recursive function taking the code string s
          d = k++) =>              //     and the divisor d
    n ?                            // if n is not equal to 0:
      k % d-- ?                    //   if d is not a divisor of k:
        g(s, d)                    //     recursive call to test the next divisor
      :                            //   else:
        g(                         //     recursive call with s updated and d undefined:
          d ?                      //       if d is not equal to 0 (i.e. k is composite):
            s                      //         leave s unchanged
          :                        //       else (k is prime):
            s +                    //         decrement n and add to s
            `-!/${n--,k}/.test(n)` //         the next condition based on the prime k
                                   //       the lack of 2nd argument triggers 'd = k++'
        )                          //     end of recursive call
    :                              // else (n = 0):
      eval(s + ';)++n')            //   complete and evaluate the code string
)`for(;`                           // initial call to g with s = [ "for(;" ]


4

Pyth,14个字节

n>5

f@I`M.fP_ZQ1y`

在线尝试!

f@I`M.fP_ZQ1y`     Full program. Q is the input.
f                  Find the first positive integer that fulfils the condition.
 @I`M.fP_ZQ1y`     Filtering condition, uses T to refer to the number being tested.
     .f   Q1       Starting at 1, find the first Q positive integers (.f...Q1) that
       P_Z         Are prime.
   `M              Convert all of those primes to strings.
  I                Check whether the result is invariant (i.e. doesn't change) when...
 @          y`     Intersecting this list with the powerset of T as a string.

Pyth,15个字节

速度稍快,但增加了1个字节。

f.A/L`T`M.fP_ZQ

在线尝试!

f.A/L`T`M.fP_ZQ     Full program. Q is the input.
f                   Find the first positive integer that fulfils the condition.
 .A/L`T`M.fP_ZQ     Filtering condition, uses T to refer to the number being tested.
         .f   Q     Starting at 1, find the first Q positive integers (.f...Q) that
           P_Z      Are prime.
       `M           Convert all of those primes to strings.
 .A/L               And make sure that they all (.A) occur in (/L)...
     `T             The string representation of T.


3

木炭,42字节

≔¹ηW‹LυIθ«≦⊕η¿¬Φυ¬﹪ηκ⊞υη»≔¹ηWΦυ¬№IηIκ≦⊕ηIη

在线尝试!链接是详细版本的代码。说明:

≔¹ηW‹LυIθ«≦⊕η¿¬Φυ¬﹪ηκ⊞υη»

建立第一个n由所有先前发现的素数的所有整数的审判庭素数。

≔¹ηWΦυ¬№IηIκ≦⊕η

遍历所有整数,直到找到一个包含所有素数作为子串的整数。

Iη

将结果转换为字符串并隐式打印。

通过用替换最后一个≦⊕η,程序的速度可以增加一倍,而只花费一个字节,≦⁺²η但是它仍然太慢而无法计算n>6


3

Perl 6的63 59个字节

-4字节归功于nwellnhof

{+(1...->\a{!grep {a~~!/$^b/},(grep &is-prime,2..*)[^$_]})}

在线尝试!

蛮力解决方案在TIO上对5以上的数字超时,但是我很确定它可以正常工作。查找包含第一个质n数的第一个正数。这是一个永不超时的解决方案n=6

说明:

{                                                             } # Anonymous code block
 first                                                    2..*  # Find the first number
       ->\a{                                            }       # Where:
            !grep     # None of
                                                   [^$_]  # The first n
                              (grep &is-prime,2..*)       # primes
                  {a~~!/$^b/},   # Are not in the current number

您是否有任何方法可以验证输出的较大数字,或添加说明?我不太会说Perl,当然也不会说高尔夫。我在输入5的TIO上遇到了超时,因此我无法真正验证它是否只是连接素数。
maxb

@maxb我已向解决方案添加了一个链接,该链接可预先生成素数,而不是反复生成素数和解释。
Jo King


2

Python 2,91字节

n=input();l=[]
P=k=1
while~-all(`x`in`k`for x in(l+[l])[:n]):P*=k*k;k+=1;l+=P%k*[k]
print k

在线尝试!


如果我不知道您的代码生成了质数,那么我将永远无法弄清楚它是不是。做得好!
maxb

2

SAS,149字节

data p;input n;z:i=1;a=0;v+1;do while(a<n);i+1;do j=2 to i while(mod(i,j));end;if j=i then do;a+1;if find(cat(v),cat(i))=0 then goto z;end;end;cards; 

cards;语句后输入输入,如下所示:

data p;input n;z:i=1;a=0;v+1;do while(a<n);i+1;do j=2 to i while(mod(i,j));end;if j=i then do;a+1;if find(cat(v),cat(i))=0 then goto z;end;end;cards; 
1
2
3
4
5
6
7

输出数据集p,结果v为,每个输入值都有一个输出行。从技术上讲应该可以在所有给定的测试用例中使用(SAS中具有全精度的最大整数是9,007,199,254,740,992),但是我让它在n = 8上思考了5分钟之后就放弃了。

说明:

data p;
input n; /* Read a line of input */

z: /* Jump label (not proud of this) */
    i=1; /* i is the current value which we are checking for primality */
    a=0; /* a is the number of primes we've found so far */
    v+1; /* v is the final output value which we'll look for substrings in */ 

    do while(a<n); /* Loop until we find the Nth prime */
        i+1; 
        do j=2 to i while(mod(i,j));end; /* Prime sieve: If mod(i,j) != 0 for all j = 2 to i, then i is prime. This could be faster by only looping to sqrt(i), but would take more bytes */
        if j=i then do; /* If i is prime (ie, we made it to the end of the prime sieve)... */
            a+1;
            if find(cat(v),cat(i))=0 then goto z; /* If i does not appear as a substring of v, then start all over again with the next v */
        end;
    end;

/* Input values, separated by newlines */
cards; 
1
2
3
4
5
6
7

1

Haskell,102字节

import Data.List
f n|x<-[2..n*n]=[a|a<-[2..],all(`isInfixOf`show a).take n$show<$>x\\((*)<$>x<*>x)]!!0

在线尝试!

解释/取消包装

既然我们已经Data.List导入了,我们不妨使用它:除了很好的旧take n[p|p<-[2..],all((>0).mod p)[2..p-1]]用法,我们还可以使用另一种方式生成所需的所有素数。即,我们生成了足够数量的复合材料,并将它们与一起使用(\\)

[2..n*n] \\ ( (*) <$> [2..n*n] <*> [2..n*n] )

n*nπ(n)<n2log(n2)

[ a | a <- [2..], all (`isInfixOf` show a) . take n $ enoughPrimes ] !!0

1

Japt,20个 18字节

远非我最出色的工作,我很乐意在一天过后让它工作。我确定以后我会在酒杯上敲打它!

_õ fj ¯U e!øZs}aUÄ

尝试 -输入,需要13秒才能运行7,然后引发一阵颤抖(更新后的版本5对我不利,但这可能只是我的手机)。


@Oliver,嗯...我也是。当我发布它时,它肯定在工作。只是F.h()单独运行了一个测试,它似乎已损坏;ETH必须有所改变。
毛茸茸的

@Oliver,不,最近一次提交是2天前,所以自从我发布此内容以来,没有任何更改。奇怪的!
毛茸茸的

现在正在工作!¯\ _(ツ)_ /¯
奥利弗

@Oliver,仍然无法为我工作。怪异者和怪异者!
毛茸茸的

从我从工作计算机转到家用计算机以来,它一直在为我工作。确实很奇怪!
奥利弗
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.