パスカルプライムですか?


18

奇数の素数がパスカルの三角形に正確に2回現れることはよく知られています。ただし、パスカルの三角形に正確に2回現れるすべての数値が素数であるとは限りません。これらの数字をパスカル素数と呼びます。

パスカル素数は、パスカルの三角形に正確に2回現れる複合数です。最初のいくつかのパスカル素数は

4, 8, 9, 12, 14, 16, 18, ...

あなたの挑戦は、nがパスカル素数であるかどうかに応じて、正の整数nを入力および出力としてtrueまたはfalseにすることです。これはコードゴルフなので、最短のプログラムが勝ちです!



2
パスカル素数でない場合はTrueを、そうでない場合はfalseを出力できますか?
コイナーリンガーをケアします。


@cairdcoinheringaahingいいえ、それは所定の要件内にある必要があります。
単に美しいアート

Pascalに誰も回答を投稿していないことに驚いています。時間に余裕があれば(そして古いPascalコンパイラを見つけることができれば)します。
マナセカッツ

回答:


10

Wolfram言語(Mathematica)、45バイト

CompositeQ@#&&Binomial~Array~{#-1,#}~FreeQ~#&

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

すべての合成数nは、行nに正確に2回出現し、その後は出現できません。したがって、Pascalプライムの条件は、最初のn-1行にまったく表示されないことです。

私の知る限り、これは最初のn行内で正確に2回表示され、!PrimeQ代わりに使用できることを確認するよりも短いです。


4

Python 2、93バイト

def f(n):l=[1];exec"(n in l)>=any(n%k<1for k in range(2,n))>q;l=map(sum,zip([0]+l,l+[0]));"*n

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

これは名前付き関数fで終了コードを介して出力します。パスカルプライムの場合0、それ以外の場合は1です。

これはどのように機能しますか?

def f(n):l=[1];                       # Define a function f (arg. n) and a list l = [1].
exec"..."*n                           # Execute n times.
(n in l)                              # Boolean: "n is in l?" is greater than...
   >=any(n%k<1for k in range(2,n))    # the boolean: "Is n composite?"?
            >q;                       # If the boolean comparison returns a falsy
                                      # result, then continue on without any difference.
                                      # Otherwise, evaluate the other part of the
                                      # inequality, thus performing "is greater than q".
                                      # Since we have no variable "q", this terminates
                                      # with exit code 1, throwing a "NameError".
l=map(sum,zip([0]+l,l+[0]));          # Generate the next row in Pascal's triangle,
                                      # By zipping l prepended with a 0 with l appended
                                      # with a 0 and mapping sum over the result.

これは、基本的にnがPascalの三角形の最初のn-1行にあるかどうか、またはそれが素数であるかどうかをチェックし、これら2つの条件のいずれかが満たされるとエラーをスローします。

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



@ovs:oそれは賢い!ありがとう。
Xcoder氏

4

ゼリー11 10 9バイト

おかげで:

  • -1バイトのMartin Ender!(別のアプローチでは、(+ 1)を使用し、n2(-2)を使用しないようにします。したがって、全体で-1です。
  • バグ修正のためのJonathan Allan
  • 別の-1バイトのデニス
Ḷc€ḶFċ=ÆP

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

代替アプローチジョナサンアラン。(欠陥)

----------- Explanation -----------
Ḷ            Lowered range. [0, 1, ..., n-1]
 c€Ḷ           `c`ombination `€`ach with `Ḷ`owered range [0...n-1]
    F        Flatten.
     ċ       Count the number of occurences of (n) in the list.
       ÆP    Returns 1 if (n) is a prime, 0 otherwise.
      =      Check equality.

最後の行の説明:

  • Martin Enderが指摘したように、「nPascalの三角形に2回現れる」は「n最初のn-1行に現れない」と同等です。
  • true数値が素数(つまりÆP == 0)ではなく、カウントcがゼロの場合に戻ります。それからそれを推測することができÆP == cます。
    これらが等しい場合、0に等しいことが証明できます。
    • ÆP 0または1のみのブール値を返します。
    • 1を返す場合n、素数であるため、最初のn-1行に表示できません(つまり、c == 0

1パスカル素数ではありません。これはそうです。
ジョナサンアラン

Ḷc€ḶFċoÆP¬動作すると思います。
ジョナサンアラン

ċ=ÆP動作するはずです。
デニス

参考までに、アプローチに欠陥を見つけて削除しました。
ジョナサンアラン

BTWも動作するḶcþ`Fċ=ÆPはずです。
Mr Xcoder

4

Haskell86 84バイト

p=[]:[zipWith(+)(1:x)x++[1]|x<-p]
f n=all((>0).rem n)[2..n-1]==any(elem n)(take n p)

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

説明

この関数pは、縮退したパスカルの三角形を再帰的に定義します。

[]
[1]
[2,1]
[3,3,1]
[4,6,4,1]
[5,10,10,5,1]

我々は(この溶液中に見ることができるように1、すべての数はやや特殊で)nに正確に2回表示n+1場合ので、我々だけチェックする必要があり、目行目以降のすべての要素が唯一の大きな取得nまでのどこかにあるnANどうかを確認するために行目要素は失格です:

any(elem n)(take(n-1)p)

これでTrue、2回以上出現するすべての要素(を除く1)があるので、必要なのは、isPrimeを返す障害のある関数を取得することだけTrueです1

all((>0).rem n)[2..n-1]

4

APL(Dyalog)44 34 24 19バイト

@Cowsquackのおかげで5バイト節約

(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳

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

どうやって?

どちらもしないことを確認します

-範囲0.. n-1

⍳∘.! -自己のデカルト二項に

⊢∊-含むn

- また

⊢|⍨-のn各項目を法とする

2↓⍳-範囲2..n-1

~0∊-含まない0(別名分割不可)


電車にそれを変換すると、(∨/1↓1≠⊢∨⍳)∧(~⊢∊⍳∘.!⍳)2バイトで短い
KritixiのLithos

@Cowsquackうーん、電車が収まるほど短くなったことに気づかなかった(40バイトで開始)。ありがとう!
ウリエル

(0∊⊢|⍨2↓⍳)∧∘~⊢∊⍳∘.!⍳別の2
つでは

@Cowsquack oo賢い。私は前に、その素数の変化を見たことがない
ウリエル

再配置~できます(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳一つ少なくバイトのために。
Kritixiリトス




2

05AB1E、10バイト

ÝDδcI¢IpÌQ

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

説明

Ý            # push range [0 ... input]
 D           # duplicate
  δc         # double vectorized command binomial
    I¢       # count occurrences of input
      Ip     # check input for primality
        Ì    # add 2
         Q   # compare for equality

パスカル三角形のn最初のn + 1行で正確に2回発生し、素数ではないチェック。
三角形に3回出現する可能性のある素数がないため、比較は機能します。





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