过去的素恋


34

考虑一个素数p,写在底座10上的存储器p被定义为不同的素数的比严格小于的数量p是包含在的子串p

挑战

给定一个非负整数n作为输入,请找到最小的素数p,以使p具有内存n。也就是说,找到具有恰好n个不同的严格较小质数作为子串的最小质数。

输入项

输入可以通过任何标准格式进行。您必须支持最大为n的输入,以使输出不会溢出。供参考,4294967291是32位中最大的素数。

输出量

输出可以写入STDOUT或从函数返回。

例子

数字2的内存为0,因为它不包含作为子字符串的严格较小的质数。

数字113是具有内存3的最小素数。数字3、13和11是唯一的素数子串,且小于113的素数中没有正好包含3个素数作为子串。

n = 0 开始的序列的前10个项是

2, 13, 23, 113, 137, 1237, 1733, 1373, 12373, 11317

注意

这是OEIS中的A079397

排行榜

var QUESTION_ID=55406,OVERRIDE_USER=20469;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


运行时间有限制吗?
Beta Decay 2015年

@BetaDecay不。
Alex A.

Answers:


8

Pyth,22个字节

f&}TPTqQlf}YPY{sMP.:`T

示范测试线束

说明:

f&}TPTqQlf}YPY{sMP.:`T
                          Implicit: Q = eval(input())
f                         Starting at T=1 and counting up, return the first T where
                    `T    repr(T)
                  .:      all substrings
                 P        except T itself
               sM         converted to integers
              {           unique examples only
         f                filter on
          }YPY            Y is in the prime factorization of Y, e.g. Y is prime.
      qQl                 Q == len of the above, that is, T has memory Q,
 &}TPT                    and T is prime, (is in its prime factorization.)

不能有你使用P_YP_T替代}YPY}TPT背呢?
暴民埃里克(Erik the Outgolfer)'17年

7

CJam,33 31 30字节

1{)__mp*{_mp2$s@s#)*},,easi^}g

这是一个完整的程序,它将输入作为命令行参数读取。

CJam解释器中在线尝试。

测试运行

$ time cjam <(echo '1{)__mp*,{_mp2$s@s#)*},,easi^}g') 9
11317
real    0m3.562s
user    0m4.065s
sys     0m0.177s

怎么运行的

1       e# Push I := 1 on the stack.
{       e# Do:
  )__   e#   Increment I and push two copies.
  mp*   e#   Check the last copy for primality and multiply with the first copy.
        e#   This pushes R := I if I is prime and R := 0 if it is composite.
  {     e#   Filter; for each J in [0 ... R-1]:
    _mp e#     Push a copy of J and check for primality.
    2$s e#     Push a copy of I and cast to string.
    @s  e#     Rotate the original J on top of the stack and cast to string.
    #   e#     Find the index (-1 if not found) of the latter in the former.
    )*  e#     Increment the index and multiply it with the result from `mp'.
        e#     This yields 0 iff J is composite or not a subtring of I.
  },    e#   Keep J if the product is non-zero.
  ,     e#   Push the length of the filtered range.
  easi  e#   Cast the array of command-line arguments to string, then to integer.
  ^     e#   XOR it with the length of the filtered range.
}g      e# Repeat while theresult is non-zero.

6

CJam,40个字节

li2sa{_)\{1$\#)},,3$-}{i{)_mp!}gsa+}w]W=

在线尝试

我敢肯定,这确实令人震惊,但实际上比丹尼斯发布的解决方案更长。好吧,不是真的,因为我对自己甚至没有很高的期望。但是我还是想试一试。而且,由于它可以正常工作,对我来说似乎很合理,而且我认为它与众不同,至少引起了人们的兴趣,我认为我还是应该发布它。

这里的基本思想是,我循环构建一个质数列表,并在每个步骤中将下一个较大的质数添加到列表中。为了检查是否终止,我计算除了列表中的最后一个元素以外,还有多少个元素是最后一个元素的子字符串。如果此计数等于input n,那么我们就完成了。

说明:

li    Get input and convert to integer.
2sa   Seed list of primes with ["2"]. The primes are stored as strings to make
      the later substring search more streamlined.
{     Start of while loop condition.
  _   Copy list of primes.
  )     Pop off last prime from list.
  \     Swap remaining list to top.
  {     Start of filter block for substring matches with all smaller primes.
    1$    Copy test prime to top.
    \     Swap the smaller prime to top to get correct order for substring search.
    #     Search.
    )     Increment to get truthy value (Search returns -1 if not found).
  },    End of filter. We have a list of smaller primes that are substrings now.
  ,     Count list entries.
  3$    Copy input n to top.
  -     Subtract the two for comparison. If they are different, continue loop.
}     End of while loop condition.
{     Start of while loop body. We need to generate the next prime.
  i     The largest prime so far is still on the stack, but as string.
        Convert it to integer.
  {     Start of loop for prime candidates.
    )     Increment current candidate value.
    _mp   Check if it is prime.
    !     Negate, loop needs to continue if it is not a prime.
  }g    End loop for prime candidates. On exit, next prime is found.
  sa+   Convert it to string, and add it to list of primes.
}w    End of while loop body.
]W=   Solution is at top of stack. Discard other stack entries.


2

八度/ Matlab,126字节

function p=f(n)
p=1;t=1;while t
p=p+1;t=~isprime(p)|sum(arrayfun(@(x)any(strfind(num2str(p),num2str(x))),primes(p)))~=n+1;end

在线尝试


2

JavaScript ES6,106个字节

n=>{for(a=[],i=2;a.filter(c=>(''+i).search(c)+1).length-n-1;a.push(i))while(!a.every(c=>i%c))i++;return i}

这是带有说明的非公开版本:

n=>{
  /**
   * a = list of primes
   * i = current integer
   * Iterate until number of members in a that are substring of i == n-1
   * After each iteration push the current value of i onto a
   */
  for(a=[],i=2; a.filter(c=>(''+i).search(c)+1).length-n-1; a.push(i)) {
    // Iterate until no member of a exactly divides i and increment i per iteration
    while(!a.every(c=>i%c)) i++;
  }
  return i;
}

当然,这变得相当慢,而且速度很快。但是,OP表示没有时间限制。


很好的解决方案,巧妙地使用ai%c检查素数。您可以通过更改{return i}else{a.push(i)}return i;else a.push(i)我相信也可以使用匿名函数来节省两个字节,这将在开始时再保存两个字节。
ETHproductions'Aug

@ETHproductions谢谢没想到。尽管我设法削减了7个字节并if...else通过将其包装在for循环中删除了所有逻辑。
乔治·里斯

哇,真聪明!如果将i++与结合使用该i%c怎么办?
ETHproductions'Aug

@ETHproductions将不起作用,因为这将为的每个值进行迭代,a并且下一个调用将出错,i例如,当我们找到10个素数时,它将为每个外循环迭代迭代10次。
乔治·瑞斯

@ETHproductions啊,是的,我最初想使用递归,但是在达到OP的最低要求之前,它已经达到了堆栈限制。现在像这样重构它应该是可能的……
乔治·里斯

2

Brachylog(2),12字节,语言日期挑战

~{ṗ≜{sṗ}ᵘkl}

在线尝试!

使用以前是13个字节,ᶠd但现在缩写了它,将其缩减为12个。由于该语言将挑战推迟了一段时间,并且该功能并未特别针对该挑战而添加,我也可以用它。

和Brachylog中一样,这是一个功能,而不是完整的程序。

说明

~{ṗ≜{sṗ}ᵘkl}
~{         }  Find a value for which the following is true:
  ṗ             The value is prime;
   ≜            (evaluation strategy hint; avoids an infinite loop)
    {  }ᵘ       The set of unique
     sṗ         substrings which are prime
          l     has a length equal to {the input}
         k      when one element is removed.

这为我们提供了具有所需属性的最小素数,因为先检查接近0的值。


1

Python 2中,163个 154字节

我太累了,无法打高尔夫球。.希望明天醒来时,我可以改善这一点。

p=lambda n:all(n%x for x in range(2,n))
g=input()
s=2
while not(p(s)and len([l for l in[str(x)for x in range(2,s)if p(x)]if l in str(s)])==g):s+=1
print s

1

朱莉娅,86字节

n->for i=1:~0>>>1 isprime(i)&&sum(j->contains("$i","$j"),primes(i-1))==n&&return i;end

这实际上是不言自明的。循环遍历所有正整数,每次找到一个素数,对一个布尔数组求和,该布尔数组指示小于当前素数的素数集是否为当前素数的子串。如果找到一个具有必要数量的匹配项,则返回该值。

当n = 11时,运行时间会变慢,对于大多数高于11的值来说,运行时间可能会变慢-特别是在我的笔记本电脑上,n = 11大约需要33秒。


干净而优雅的解决方案,即使它仅适用于64位系统(32位平台上对此的怪异的Julia类型系统的2^63求值为0,因为Julia Int32在32位系统上默认为整数文字-sic!)。这样,使解决方案在32位系统上工作的最短习惯是for i=1:uint(-1),但是要多花2个字节。但是,很难要求在所有平台上测试高尔夫解决方案,因此+1。
pawel.boczarski

@ pawel.boczarski-我可以使用位移来修复它。看看...
Glen O

我也删除了“映射”,因为它在求和中是多余的,因为求和可以采用在求和之前应用于每个术语的函数。
Glen O

0

Haskell中,149个 147 144字节

(127个字节不包括import声明)。

import Data.List
i x=x`elem`nubBy(((>1).).gcd)[2..x]
f n=[p|p<-[2..],i p,n==length(nub[x|x<-[read b|a<-tails$show p,b<-tail$inits a],i x])-1]!!0

Prelude Data.List>映射f [0..20]
[2,13,23,113,137,1237,1733,1373,12373,11317,23719,中断。

以上输出是用更长的定义产生的

i x=and$[x>1]++[rem x n>0|n<-[2..x-1]]

新的,缩短3个字符,定义要慢得多,在失去耐心和中止之前,我只能获得序列中的第5个数字。


0

Haskell119118字节

p x=all((>0).mod x)[2..x-1]
f n=[y|y<-[2..],p y,n==sum[1|x<-[2..y-1],p x,elem(show x)$words=<<(mapM(:" ")$show y)]]!!0

在线尝试!用法:f 3产量113


0

PHP,124字节

for($p=1;;){for($i=$c=0;$i-1;)for($i=++$p;$p%--$i;);$m[]=$p;foreach($m as$q)$c+=!!strstr($p,"$q");$c-1-$argv[1]?:die("$p");}

从命令行参数获取输入;与运行-r

分解

for($p=1;;)
{
    for($i=$c=0;$i-1;)for($i=++$p;$p%--$i;);    // find prime $p
    $m[]=$p;                                    // remember that prime
    foreach($m as$q)$c+=!!strstr($p,"$q");      // count memory primes
    $c-1-$argv[1]?:die("$p");                   // if memory==N, exit
}

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.