が素数になるように、最小


12

バックグラウンド

次のシーケンスを検討してください(OEISのA051935):

  • 用語始め2ます。
  • 最小の整数検索より大きい2ような2 + nが素数であるが。n22+n
  • 2 + n + n 'が素数になるように、nより大きい最小の整数を見つけます。nn2+n+n

より正式な定義:

an={2if n=0min{xNx>an1 and (x+i=0n1ai) is prime}otherwise

シーケンスの最初のいくつかの用語は次のとおりです(テストケースとしてこれらを参照してください)。

2, 3, 6, 8, 10, 12, 18, 20, 22, 26, 30, 34, 36, 42, 44, 46, 50, 52, 60, 66, 72, 74, ...

仕事

あなたのタスクは、次のいずれかの方法でこのシーケンスを生成することです。

  • その用語を無期限に出力します。
  • 与えられた、出力NN 番目の用語は、0又は1でインデックス付け)。nannth01
  • 与えられると、出力{ a 1a 2a n }(最初のn項)。n{a1,a2,,an}n

デフォルトではこれらの抜け穴が禁止されていることに注意しながら、任意のプログラミング言語で競争し、標準的な方法で入力を取得し、出力を提供できます。これはであるため、すべての言語の最短の送信(バイト単位)が優先されます。


4
素数:挑戦を書きながら回避するためのヒント。素数性以外の何かを使用することもできます。
Okx

3
1のようなこの非常に配列に特異的ないくつかの巧妙なアルゴリズムがあります):私は素数にこの時間を選択したとき@Okx私は心の中で理由のカップルを持っていたデニスが実装このためOEISエントリがすでにあります)2
氏Xcoder

回答:


4

Brachylog、13バイト

~l.<₁a₀ᵇ+ᵐṗᵐ∧

オンラインでお試しください!

出力は、シーケンスの最初のn項のリストです。

?~l.<₁a₀ᵇ+ᵐṗᵐ∧    Full code (? at beginning is implicit)

?~l.              Output is a list whose length is the input
    <₁            Output is an increasing list
      a₀ᵇ+ᵐ       And the cumulative sum of the output
           ṗᵐ     Consists only of prime numbers
             ∧    No further constraints on output

Explanation for a₀ᵇ+ᵐ:
a₀ᵇ               Get the list of all prefixes of the list
                  Is returned in increasing order of length
                  For eg. [2, 3, 6, 8] -> [[2], [2, 3], [2, 3, 6], [2, 3, 6, 8]]
   +ᵐ             Sum each inner list  -> [2, 5, 11, 19]


4

ゼリー11 9バイト

0Ḥ_ÆnɗСI

これは、引数としてnを取り、シーケンスの最初のn項を出力する完全なプログラムです。

オンラインでお試しください!

使い方

0Ḥ_ÆnɗСI  Main link. Argument: n

0          Set the return value to 0.
      С   Accumulating iterate. When acting on a dyadic link d and called with
           arguments x and y, the resulting quicklink executes
           "x, y = d(x, y), x" n times, returning all intermediate values of x.
           Initially, x = 0 and  y = n.
     ɗ       Drei; combine the three links to the left into a dyadic chain.
 Ḥ             Unhalve; double the left argument.
  _            Subtract the right argument.
   Æn          Compute the next prime.
           This computes the partial sums of the sequence a, starting with 0.
        I  Increments; compute the forward differences.

3

05AB1E V2と、10のバイト

2λλOD₁+ÅNα

オンラインでお試しください!

これは非レガシーバージョンでのみ機能し、Elixirの書き換えです。整数の無限ストリームを出力します。プライムテストには、最新のコミットで修正されたバグがいくつかありますが、まだTIOで公開されていません。ただし、ローカルでは機能します。ここには、私のマシンで実行されたGIFです。ストリーム全体ではなく、最初の数語を出力するように修正されています。

使い方

2λa(n)a(0)2

λO

λ[a0a1an1]O

D₁+

an1

ÅN

上記の合計よりも厳密に大きい最低素数を生成します。

α

最後に、上記で計算された素数と以前に計算された合計の最初のコピー(以前のすべての反復の合計)の絶対差を取得します。

その後、ストリームは暗黙的にSTDOUTに無期限に出力されます。


2

Perl 6、45バイト

2,{first (*+@_.sum).is-prime,@_[*-1]^..*}...*

オンラインでお試しください!

終わりのないシーケンスを生成する遅延リストを返します。

説明:

これは、シーケンス...を次のように定義するシーケンス演算子を使用します。

2,  # The first element is 2
  {  # The next element is:
    first  # The first value that:
          (*+@_.sum).is-prime,  # When added to the sum is a prime
          @_[*-1]^..*  # And is larger than the previous element
  }
...*  # And continue the sequence indefinitely



2

パイス12 11バイト

.f&P-;Z=-;Z

オンラインでお試しください!

isaacgのおかげで1バイト節約されました。

n1ベースのインデックスを使用して、そのような最初の数値を生成します。

.fkゼロから始まる特定の基準を満たす最初の整数を見つけます。ここで、基準は、計算した前の素数に;現在の数を加えたものZが素数(P)であることです。そうである場合、論理関数と関数の短絡動作を使用して、最後に計算された素数も更新します(&)。残念ながら、.fデフォルトの変数はZ更新に1バイトかかります。

isaacgが計算したトリックは、最後の素数の否定を保存し、それから現在の値を引いたものをテストすることでした。これはPythでは素数チェックがオーバーロードされているため短くなります。正の数では素因数分解を見つけ、負の数では数の正の値が素数かどうかを判断します。

これは多かれ少なかれ以下に変換されます。

to_find = input()
last_prime = 0
current = 0
results = []
while to_find > 0:
    if is_prime( current + last_prime ):
        results.append( current )
        to_find -= 1
        last_prime += current
    current += 1
print results

交換する_+-して+-は-1バイト。
isaacg

@isaacgそれは非常に賢いです!編集します。
FryAmTheEggman

2

MATL、21バイト

O2hGq:"t0)yd0)+_Yqh]d

オンラインでお試しください!

出力は、シーケンスの最初のn項です。

説明:

素数のリスト(最初は0)を作成し、最後にリスト内の連続する素数の差を返します。

              % Implicit input, say n
O2h           % Push P = [0, 2] on the stack 
Gq:"          % for loop: 1 to n-1
  t0)           % Take the last element of P
                %  Stack: [[0, 2], [2]] (in first iteration)
  yd0)          % Take the difference between the last
                %   two elements of P
                %  Stack: [[0, 2], [2], [2]]
  +             % Add those up
                %  Stack: [[0, 2], [4]]
  _Yq           % Get the next prime higher than that sum
                %  Stack: [[0, 2], [5]]
  h             % Concatenate that to the list P
                %  Stack: [[0, 2, 5]]
]             % End for loop
d             % Get the differences between successive elements of
              %   the final list P

2

Haskell、67バイト

(1#1)2 2
(p#n)s k|p`mod`n>0,n-s>k=k:(p#n)n(n-s)|w<-p*n=(w#(n+1))s k

オンラインでお試しください!

(1#1)2 2ある何の入力を受けていない機能と無限のリストを出力します。


古い答え:

Haskell88 83 78 76バイト

素数テストはこの答えからのものであり、Christian Sieversによって改善されました(-2バイト)。

WWのおかげで-5バイト。

2#2
(p#s)n|n<1=p|w<-until(\m->mod(product[1..m-1])m>0)(+1)$s+p+1=(w-s)#w$n-1

オンラインでお試しください!


あなたはなしで行うことができます^2。これにより、述語はテストが素数からテストが素数または4に変わります、このアプリケーションでは関係ありません。
クリスチャンシーバーズ

2

05AB1E(レガシー)、12バイト

0U[XN+DpiN,U

オンラインでお試しください!

説明

0U              # initialize X as 0
  [             # start an infinite loop
   XN+          # add X to N (the current iteration number)
      Dpi       # if the sum is prime:
         N,     #   print N
           U    #   and store the sum in X

いくつかの異なる12バイトのソリューションが可能です。
この特定のものは、使用可能な変数を0(1および2ではなく)に初期化した場合、10バイトでした。



1

パイソン299の 98バイト

def f(n,s=2,v=2):
 k=s-~v
 while any(k%i<1for i in range(2,k)):k+=1
 return n and f(n-1,k,k-s)or v

オンラインでお試しください!

Mr. Xcoderへの1バイトの送信


1
私は知っています...私は知っています...私と私のビットごとのトリックのペダントリー:)しかし、あなたはでバイトを節約できますk=s-~v
Mr Xcoder

@氏。Xcoder:あなたの不浄なビットごとのソーサリーはあなたの終わりです!:)
チャスブラウン

1

Haskell101 99 97バイト

この関数lは引数を取らず、無限リストを返します。@ovsによるより直接的なアプローチほど短くはありません(そして明らかに、いくつかの部分が彼らの答えを盗みました)が、それでもゴルフはできますか?

-2バイトをありがとう@ H.PWiz!

import Data.List
p m=mod(product[1..m-1])m>0
l=2:[until(p.(+sum a))(+1)$last a+1|a<-tail$inits l]

オンラインでお試しください!




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.