プライムクラスターを共有しますか?


10

プライムクラスタ整数Nよりも高い2は最高素数によって形成対として定義される厳密より低いNプライム最低厳密以上N

整数が素数自体である場合は、上記の定義を以下、そのプライムクラスタが素数の組であることに注意先行及び後続それは。

仕事

2つの整数整数NMN、M≥3)が与えられた場合、NMが同じ素数クラスターを持っているかどうかに基づいて、真/偽の値を出力します。

これはであるため、目的はバイト数をできるだけ減らすことです。したがって、すべてのプログラミング言語で最も短いコードが優先されます。

テストケース/例

例えば、のプライムクラスタ9がある[7, 11]ので、:

  • 79より厳密に低い最高の素数であり、
  • 119よりも厳密に高い最低の素数です。

同様に、67の素数クラスターは[61, 71]67は素数であることに注意)です。

真実のペア

8、10
20、22
65、65
73、73
86、84
326、318
513、518

偽のペア

4、5
6、8
409、401
348、347
419、418
311、313
326、305

真/偽の値は2つの異なる値である必要がありますか、それともプログラムの出力から真/偽の値へのマッピングを定義し、(潜在的に無限に)多くの異なる値を出力できますか?
Jonathan Frech 2017年

@JonathanFrech 意思決定問題の定義ごとの真実/誤り、必ずしも一貫しているわけではないが、明確で真実/誤り
Xcoder氏17年

回答:


14

ゼリー6 4 3 5 4バイト

rÆPE

オンラインでお試しください!またはすべてのテストケースを試してください

使い方

rÆPE    Main link. Arguments: N, M
r       Yield the range of integers between N and M, inclusive.
 ÆP     For each integer, yield 1 if it is prime, 0 otherwise.
   E    Yield 1 if all items are equal (none in the range were prime,
        or there's only one item).

2つの数が異なる素数クラスタを持つのは、それらの間に素数があるか、どちらかの数値自体が素数である場合に有効です。両方の数値が同じである場合を除き、どちらの場合も結果Eは返され1ます(単一項目配列内のすべての項目は等しい)。


7
プログラムのソースが友好的に見えない...
スタン・ストラム

2

Perl 6、52バイト

{[eqv] @_».&{(($_...0),$_..*)».first(*.is-prime)}}

試して

拡張:

{  # bare block lambda with implicit slurpy input 「@_」

  [eqv]               # see if each sub list is equivalent

    @_».&{            # for each value in the input

      (

        ( $_ ... 0 ), # decreasing Seq
          $_ ..  *    # Range

      )».first(*.is-prime) # find the first prime from both the Seq and Range

    }
}


2

Ruby57 54バイト

->n,m{[*n..m,*m..n].all?{|x|?1*x=~/^(11+)\1+$/}||n==m}

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

私の答え(クリックするまで忘れていました)から関連する質問への恐ろしい正規表現素数性テストを使用しますこの数は素数ですか?。N、M≥3であるため、1のチェックをパターンから削除できるため、バイト数を組み込みを使用するよりも少なくできます。

注:正規表現の素数性テストは、病理学的に、陽気に非効率的です。少なくともO(n!)だと思いますが、今はそれを理解する時間はありません。100,001をチェックするのに12秒かかり、キャンセルする前に1,000,001で5〜10分の研削を行っていました。自己の責任において使用/乱用してください。


1
そのレートでそれはありそうです。あなたは知っています、100001! = 2824257650254427477772164512240315763832679701040485762827423875723843380680572028502730496931545301922349718873479336571104510933085749261906300669827923360329777024436472705878118321875571799283167659071802605510878659379955675120386166847407407122463765792082065493877636247683663198828626954833262077780844919163487776145463353109634071852657157707925315037717734498612061347682956332369235999129371094504360348686870713719732258380465223614176068 ... (Warning: The output exceeded 128 KiB and was truncated.)それは実行するために数千年かかるでしょう。
user202729 2017年

2

網膜、58バイト

\b(.+)¶\1\b

.+
$*
O`
+`\b(1+)¶11\1
$1¶1$&
A`^(11+)\1+$
^$

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

\b(.+)¶\1\b

両方の入力が同じ場合は、すべてを削除し、最後に出力1に進みます。

.+
$*

単項に変換します。

O`

順番に並べ替えます。

+`\b(1+)¶11\1
$1¶1$&

すべての数値の範囲に展開します。

A`^(11+)\1+$

すべての合成数を削除します。

^$

数字が残っていない場合は1、それ以外の場合は0を出力します。


2

PARI / GP、28バイト

v->s=Set(v);#s<2||!primes(s)

すべてのテストケースでオンラインでお試しください!

0または1(通常のPARI / GP "ブール"値)を返します。

説明:

v座標としての2つの数値Nを持つベクトル(または列ベクトル、またはリスト)でなければなりませんM。例えば[8, 10]。その後s、これらの数値から作成された「セット」になります。これは、1座標ベクトル(の場合N==M)、またはそれ以外の場合はエントリをソートした2 座標ベクトルのいずれかです。

次に#s、座標の数がs1つだけの場合、1(真実)になります。それ以外の場合primesは、閉じた区間からs[1]までのすべての素数のベクトルを返しs[2]ます。その否定!1、ベクトルが空の場合に与えられ、1つ以上の非ゼロエントリ(ここでは1つ以上の素数)のベクトルの否定は、与えられ0ます。


2

JavaScript(ES6)、57 56バイト

カリー化構文で入力を受け取ります(a)(b)0またはを返します1

a=>b=>a==b|!(g=k=>a%--k?g(k):k<2||a-b&&g(a+=a<b||-1))(a)

テストケース

どうやって?

a => b =>                 // given a and b
  a == b |                // if a equals b, force success right away
  !(g = k =>              // g = recursive function taking k
    a % --k ?             //   decrement k; if k doesn't divide a:
      g(k)                //     recursive calls until it does
    :                     //   else:
      k < 2 ||            //     if k = 1: a is prime -> return true (failure)
      a - b &&            //     if a equals b: neither the original input integers nor
                          //     any integer between them are prime -> return 0 (success)
      g(a += a < b || -1) //     else: recursive call with a moving towards b
  )(a)                    // initial call to g()

2

R63 46バイト

-17ジュゼッペ

function(a,b)!sd(range(numbers::isPrime(a:b)))

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

ETHProductionsのゼリーソリューションのかなり単純なアプリケーション。主な興味深い要点、Rブールベクトルでany(x)==all(x)はと同等であることmin(x)==max(x)です。



また、min(x)==max(x)はすべての要素is_prime(a:b)が等しいことを確認することと同じであるため、この最後のトリックを使用して、またはパッケージで46バイトに減らすことができます。primesnumbers
ジュゼッペ

2

C(GCC)、153の 146バイト

i,B;n(j){for(B=i=2;i<j;)B*=j%i++>0;return!B;}
#define g(l,m,o)for(l=o;n(--l););for(m=o;n(++m););
a;b;c;d;h(e,f){g(a,b,e)g(c,d,f)return!(a-c|b-d);}

-7 Jonathan Frechから

定義する関数h2を取り込みintsおよびリターン1truthyのためと0 falseyのために

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

n 引数が素数でない場合に1を返す関数です。

g 最初の引数と2番目の引数を、3番目の引数よりも小さい(大きい)次の素数に設定するマクロです。

hg入力と出力が同じであるか否かを確認する両方のために。


return a==c&&b==d;することができますreturn!(a-c|b-d);
Jonathan Frech 2017年


@JonathanFrech TIOリンクを修正しました。
pizzapants184 2017年


1

APL(Dyalog Unicode)18 + 16 = 34 24バイト

CY'dfns'
∧/=/4 ¯4∘.pco

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

アダムのおかげで10バイトしてにます。

⎕CY'dfns'C OP Yは)をインポートするために必要とされるDFNSをD ynamic F unctio NS)コレクションは、デフォルトDyalog APLに含まがインストールされます。

使い方:

∧/=/4 ¯4∘.pco  Main function. This is a tradfn body.
               The 'quad' takes the input (in this case, 2 integers separated by a comma.
          pco   The 'p-colon' function, based on p: in J. Used to work with primes.
    4 ¯4∘.      Applies 4pco (first prime greater than) and ¯4pco (first prime smaller than) to each argument.
  =/            Compares the two items on each row
∧/              Applies the logical AND between the results.
                This yields 1 iff the prime clusters are equal.




0

Mathematica、39 27 26バイト

Equal@@#~NextPrime~{-1,1}&

拡張:

                         &  # pure function, takes 2-member list as input
       #~NextPrime~{-1,1}   # infix version of NextPrime[#,{-1,1}], which
                            # finds the upper and lower bounds of each
                              argument's prime clusters
Equal@@                     # are those bounds pairs equal?

使用法:

Equal@@#~NextPrime~{-1,1}& [{8, 10}]
(*  True  *)

Equal@@#~NextPrime~{-1,1}& [{6, 8}]
(*  False  *)

Equal@@#~NextPrime~{-1,1}& /@ {{8, 10}, {20, 22}, {65, 65}, 
    {73, 73}, {86, 84}, {326, 318}, {513, 518}}
(*  {True, True, True, True, True, True, True}  *)

Equal@@#~NextPrime~{-1,1}& /@ {{4, 5}, {6, 8}, {409, 401}, 
    {348, 347}, {419, 418}, {311, 313}}
(*  {False, False, False, False, False, False}  *)

貢献:Jenny_mathyによる-12 バイト、Martin Enderによる-1バイト


これは次の素数のみをチェックします。NextPrime試みる[位、{ - 1,1}]
J42161217

@Jenny_mathy:あなたが正しいと思います。「348、347」テストケースに引っ掛かったが、テストに合格した。
エリックタワーズ

27のバイトは:Equal@@NextPrime[#,{-1,1}]&入力として受け取り[{N,M}]か、元の入力を維持したい場合は、この30バイトを使用しますEqual@@NextPrime[{##},{-1,1}]&
J42161217

@Jenny_mathy:まあ、...、指定された入力はリストではなく2つの整数なので、...
Eric Towers

1
リストを取得する @EricTowers は問題ありません。また、中置記法を使用してバイトを保存することもできます#~NextPrime~{-1,1}
マーティンエンダー2017年

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