それはスーパープライムですか?


22

バックグラウンド

スーパープライムは、インデックスがすべて素数のリストでも素数である素数です。シーケンスは次のようになります。

3、5、11、17、31、41、59、67、83、109、127、157、179、191、...

これは、OEISのシーケンスA006450です。

チャレンジ

正の整数を指定して、それがスーパープライムかどうかを判断します。

テストケース

2:偽
3:本当
4:偽
5:true
7:偽
11:true
13:偽
17:真
709:true
851:偽
991:真

得点

これはであるため、各言語の最短の回答が優先されます。


6
2のインデックスは何ですか?それは1または0
デニス

1
@Dennisでは、シーケンスは1インデックス付きです。2のインデックスは1です。
musicman52317

2
スーパープライムとは何かを読んだ後、最初に考えました:スーパースーパープライムとは何ですか?またはsuper ^ 3-primes?宇宙の原子の数、または11番目のスーパー^ 11-プライムの大きいものは何ですか?あなた、親愛なるインターネットの人は、私のプライムタイムの私の時間のさらに数時間を盗んでいます!
J_F_B_M

@J_F_B_Mそれに基づいて挑戦してください!:D
musicman523

1
@J_F_B_M 11は11'thスーパープライムは、超超超素数であるように、スーパープライムスーパープライムリストのインデックスです、またスーパープライム(3)である
Skidsdev

回答:


21

ゼリー、5バイト

ÆRÆNċ

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

使い方

ÆRÆNċ  Main link. Argument: n

ÆR     Prime range; yield the array of all primes up to n.
  ÆN   N-th prime; for each p in the result, yield the p-th prime.
    ċ  Count the occurrences of n.

8
まあくそそれは、あなたが再び勝つ...
ETHproductions

3
彼はいつも...ん
復活モニカ-グリフォン

@ETHproductionsまあ、解決策はかなり明白です...それはここの忍者です。
エリックアウトゴルファー

14

Mathematica、26 23バイト

3バイトを節約してくれたuser202729に感謝します。

PrimeQ/@(#&&PrimePi@#)&

これはMathematicaがほとんどの無意味な式(この場合Andは2つの数値の論理)を評価せずに残しMap、リストだけでなく任意の式に適用できるという事実を利用しています。したがってAnd、入力とそのプライムインデックスを計算しますが、これはそのままであり、次にMap、この式の素数テストを実行して、の2つのオペランドAndをブール値に変換しますAnd


1
23バイト:PrimeQ/@(#&&PrimePi@#)&
-user202729

@ user202729よろしくお願いします。:)
マーティンエンダー

10

ゼリー、6バイト

ÆRi³ÆP

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

私のJaptの答えと同じテクニックを使用します:nまでの素数を生成し、そのリストでnのインデックスを取得し、素数性をチェックします。n自体が素数でない場合、インデックスは0であり、これも素数ではないため、とにかく0が返されます。


9

Japt13 11バイト

õ fj bU Ä j

オンラインでテストしてください!

説明

私のオリジナルの提出とは異なり、これは実際には非常に簡単です。

 õ fj bU Ä  j    
Uõ fj bU +1 j    Ungolfed
                 Implicit: U = input integer
Uõ               Generate the range [1..U].
   fj            Take only the items that are prime.
      bU         Take the (0-indexed) index of U in this list (-1 if it doesn't exist).
         +1 j    Add 1 and check for primality.
                 This is true iff U is at a prime index in the infinite list of primes.
                 Implicit: output result of last expression

4

Pythonの3104の 97 93バイト

p=lambda m:(m>1)*all(m%x for x in range(2,m))
f=lambda n:p(n)*p(len([*filter(p,range(n+1))]))

0/を返す1必要がある場合、最大4バイト長くなりますTrue / False

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


1
0/1で構いません。いい答えだ!の値を使用することはないため、このようにfコードを再フォーマットし、バイトカウントから除外できます。
musicman523

@ musicman523ヒントをありがとう!
C McAvoy

3

ゼリー、7バイト

ÆCÆPaÆP

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

ÆC素数の数未満またはカウントが入力(入力された場合ので、等しいN番目の素数を、それを返すN)。次に、ÆPこのインデックスの素数性をテストします。最後に、aこの結果とÆP元の入力の(素数テスト)の間で論理ANDを実行します。



2

05AB1E、6バイト

ÝØ<Øså

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

説明

ÝØ<Øså
Ý      # Push range from 0 to input
 Ø     # Push nth prime number (vectorized over the array)
  <    # Decrement each element by one (vectorized)
   Ø   # Push nth prime number again
    s  # swap top items of stack (gets input)
     å # Is the input in the list?




1

QBIC、33バイト

~µ:||\_x0]{p=p-µq|~q=a|_xµp]q=q+1

説明

~   |   IF   ....  THEN (do nothing)
  :         the number 'a' (read from cmd line) 
 µ |        is Prime
\_x0        ELSE (non-primes) quit, printing 0
]           END IF
{           DO
            In this next bit, q is raised by 1 every loop, and tested for primality. 
            p keeps track of how may primes we've seen (but does so negatively)
    µq|     test q for primality (-1 if so, 0 if not)
p=p-        and subtract that result from p (at the start of QBIC: q = 1, p = 0)
~q=a|       IF q == a
_xµp        QUIT, and print the prime-test over p (note that -3 is as prime as 3 is)
]           END IF
q=q+1       Reaise q and run again.


1

Haskell、121バイト

f=filter
p x=2==(length$f(\a->mod(x)a==0)[1..x])
s=map(\(_,x)->x)$f(\(x,_)->p x)$zip[1..]$f(p)[2..]
r x=x`elem`(take x s)

1
(\(_,x)->x)snd(\(x,_)->p x)です(p.fst)。どちらfstsnd輸入の必要がないので、プレリュードです。
ライコニ

バックティックを頻繁に使用しないでくださいr x=elem x$take x s。ただし、この場合は、ポイントフリーに(バッククォートを再度導入して)関数名を省略できますelem<*>(`take`s)
-nimi



1

Matlab、36 34バイト

Tom Carpenterのおかげで2バイト節約されました。

組み込み関数を使用した非常に単純な実装:

isprime(x)&isprime(nzz(primes(x)))

1
オクターブのみの場合は、さらにバイトを保存することもできます(p=@isprime)(x)&p(nnz(primes(x)))
トムカーペンター



0

ジュリア0.6、61バイト

xがスーパープライムの場合は1、そうでない場合は0を返します。

isprime-kind関数を使用しません。

x->a=[0,1];for i=3:x push!(a,0i%(2:i-1))end;a[sum(a)]&a[x]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.