プライムツインはありますか?


23

整数は、正であり、正確に2つの異なる除数(1とそれ自体)がある場合にのみ素数です。ツインプライムペアは、2つの要素で構成されます:pおよびp±2両方とも素数です。

入力として正の整数が与えられます。あなたの仕事は、与えられた整数が双子のペアに属するかどうかに応じて、標準のルールに従って、真偽/偽を返すです(値は一貫している必要があります)。

テストケース

  • Truthy(ツインプライムズ): 3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43

  • 偽(ツインプライムではない): 2, 15, 20, 23, 37, 47, 97, 120, 566

これはなので、バイト単位の最短コードが勝ちです!


13はプライムツインですか?
LiefdeWen

@LiefdeWenはい、ペア(
11、13

回答:



11

ゼリー10 9バイト

%6+_2_ÆP⁺

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

バックグラウンド

(3、5)を除き、すべてのツインプライムペアは(6k-1、6k + 1)の形式です。

以降+(6K - 1)6% - 3 = 6K - + 5 1 - 3 = 6K + 1 - (1 6K)および
(6K + 1)+(+ 1 6K)6% - 3 = 6K + 1 + 1 -3 = 6k-1で、入力n> 3が与えられた場合nn + n%6-3が両方とも素数であるかどうかをチェックするだけで十分です。

この式は、3 = 3%6-3 = 3が素数で、3が双子素数であるため、n = 3でも機能します。

使い方

%6+_2_ÆP⁺  Main link. Argument: n

%6         Compute n%6.
  +        Add n to the result.
   _2      Subtract 2.
     _ÆP   Subtract 1 if n is prime, 0 if not.
           If n is not a prime, since (n + n%6 - 2) is always even, this can only
           yield a prime if (n + n%6 - 2 = 2), which happens only when n = 2.
        ⁺  Call ÆP again, testing the result for primality.

7

Python 3、53バイト

lambda n:sum((n+n%6-3)*n%k<1for k in range(2,4*n))==2

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

バックグラウンド

全ての整数は整数で、次のいずれかの形式を取るK- 3 6K6K - 26K - 16K+ 1 6K+ 2 6K

以来、6K - 26K、および6K + 2すべてが偶数、かつためである3 - 6Kで割り切れる3を除くすべての素数、2及び3の形式でなければならない6K - 1又は6K + 1(3、5)を除いて、ツインプライムペアの差は2であるため、すべてのツインプライムペアの形式は(6k-1、6k + 1)です。

してみましょうn個の形式であることが6kの±1

  • もしN = 6K -1、その後、N + nは6% - 3 = 6K - 1 +(6K - 1)6% - 3 = 6K - + 5 1 - 3 = 6K + 1

  • もしN = 6K + 1は、N + N 6% - 3 = 6K + 1 +(6K + 1)6% - 3 = 6K + + 1 1 - 3 = 6K - 1

したがって、場合 nは双子素数ペアの一部であるN≠3 、それの双子になります3 - + N%6 N

使い方

Pythonには、組み込みの素数性テストがありません。単数の素数をテストする方法は短めですが、2つの数をテストするのは時間がかかります。代わりに除数を使用します。

sum((n+n%6-3)*n%k<1for k in range(2,4*n))

どのように多くの整数カウントK間隔で[2、4N)除算3)N - (N + N%6均一に、すなわち、それはの約数の数カウント(N + N%6 - 3)N区間での[2 、4n)nがツインプライムペアの一部である場合にのみ、このカウントが2であると主張します。

  • もしN = 3(双子素数)、(N + N%6から3)は、n = 3(3 + 3から3)= 9 2つの除数(持つ3及び9で)[2、12)

  • 場合N> 3は、前に見たように、双子素数であり、M = N + N%6 - 3がその双子です。この場合、mnには正確に4つの除数、1、m、n、mnがあります。

    以来3 N> 、我々はM> 4ので、4N <MNとちょうど二つの除数(MおよびN)の間隔に分類[2、4N)を

  • 場合N = 1は、次いで、(N + N%6から3)は、n = 1 + 1 - 3 = -1には除数有していない[2、4)

  • 場合はn = 2の場合、(N + N%6から3)は、n = 2(2 + 2から3)= 2の一方除数(自体)を有している[2、8)

  • 場合N = 4、次いで、(N + N%6から3)は、n = 4(4 + 4から3)= 20 4つの除数有する(245、及び10で)[2、16)

  • 場合N> 4であっても、ある2N / 2、及びnは全分割N、したがって、N - (3、N + N%6) 。我々は、N / 2> 2ためN> 4、そうで少なくとも三つの約数がある[2、4N)が

  • もしN = 9、次いで、(N + N%6から3)は、n = 9(9 + 3から3)= 81 3つの除数(持つ39、及び21で)[2、36)

  • 場合N>図9は、の倍数である3、次いで3N / 3、及びnは全て除算N、それゆえ、及びN - (3〜6%、N + N) 。我々はN / 3> 3ので、N> 9、そうで少なくとも三つの約数がある[2、4N)が

  • 最後に、n = 6k±1> 4が双子素数でない場合は、nまたはm:= n + n%6-3のいずれかが複合でなければならないため、適切な除数d> 1を受け入れます。

    n = m + 2またはm = n + 2およびn、m> 4のいずれかなので、整数dm、およびnmnの別個の約数です。また、M <N + 3 <4Nので、N> 1、ので、MNは、少なくとも3個の約数を有する[2、4N)


ワオ。このような短いコードでありながら、非常に多くの特殊なケースでは、正しく処理する必要があります。Python 3と言う理由は何ですか?私の知る限り、Python 2でも動作します。
kasperd17年

はい、これはPython 2でも同様に機能します。3はTIOから自動生成されたSE投稿の一部です。
デニス


4

PHP、52バイト

<?=($p=gmp_prob_prime)($n=$argn)&&$p($n+2)|$p($n-2);

GMPなし、84バイト

スタックオーバーフローから私の主要な関数を使用し

<?=p($n=$argn)&&p(2+$n)|p($n-2);function p($n){for($i=$n;--$i&&$n%$i;);return$i==1;}

でパイプとして実行し-nFます。虚偽、1真実のための空の出力。

PHPに移植されたDennisの優れたソリューション56バイト

while($i++<4*$n=$argn)($n+$n%6-3)*$n%$i?:$s++;echo$s==3;

でパイプとして実行する-nR、オンラインで試してください



3

MATL、11バイト

HOht_v+ZpAa

出力は0または1です。

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

説明

H    % Push 2
O    % Push 0
h    % Concatenate horizontally: gives [2 0]
t_   % Push a negated copy: [-2 0]
v    % Concatenate vertically: [2 0; -2 0]
+    % Add to implicit input
Zp   % Isprime
A    % All: true for columns that only contain nonzeros
a    % Any: true if there is at least a nonzero. Implicit display


2

網膜45 44バイト

.*
$*
11(1+)
$1¶$&¶11$&
m`^(11+)\1+$

1<`1¶1

入力が双子素数の場合は1、それ以外の場合は0を返します

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

説明

.*              
$*

単項に変換

11(1+)          
$1¶$&¶11$&

n-2、n、およびn + 2をそれぞれの行に配置します

m`^(11+)\1+$   

(末尾の改行)1より大きいすべてのコンポジットを削除します

1<`1¶1          

2つの連続した素数があるかどうかを確認します(3は双子の素数であるため1,3)


2

Perl 6、24バイト

?(*+(0&(-2|2))).is-prime

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

*この匿名関数の引数です。 0 & (-2 | 2)は、数字0-2ORのいずれかで構成されるジャンクション2です。*このジャンクションに追加する*と、数字と数字のいずれか* - 2ORのジャンクションが生成され* + 2ます。is-primeこのジャンクションでメソッドを呼び出すと、*プライムANDまたは* - 2OR * + 2がプライムの場合に真理値が返されます。最後に、?trueジャンクションをブール値に折りたたみ、consistent-return-values条件を満たします。


2

JavaScript、91バイトJared Smithのおかげで81バイト

p=n=>{for(i=2;i<n;)if(n%i++==0)return !!0;return n>1},t=n=>p(n)&&(p(n+2)||p(n-2))

説明

p指定された数nが素数であるかどうかを示し、指定された数とをtテストnn±2ます。


あなたは必要としないvar、周りの括弧n関数定義では、など
ジャレッド・スミス

スニペットを編集してn、明度t(n)を高めるために値の横に値を表示できると思います (例7: true
テイラースコット

1
あなたの両方にTHX
セルジュ・K.

1

J、23バイト

1&p:*.0<+/@(1 p:_2 2+])

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

どうやって?

1&p:                               is the arg a prime?
    *.                             boolean and
                                   one of +2 or -2 also a prime
                     (1 p:_2 2+])  length 2 list of booleans indicating if -2 and +2 are primes
               @                   pipe the result into...
      0<+/                         is the sum of the elements greater than 0
                                   ie, at least one true

16バイト3>0#.@p:0 2 _2&+
マイル

@miles nice。基数2を非常に巧妙に使用して結果を処理します。
ジョナ



1

JavaScript(ES6)、54バイト

a=x=>f(x)&(f(x+2)|f(x-2));f=(n,x=n)=>n%--x?f(n,x):x==1


1

エクセルVBA、102の 100バイト

VBAの基本的な組み込みはありません :(

コード

セルから入力を受け取り、VBEイミディエイトウィンドウに(真)または(偽)の[A1]いずれかを出力する匿名VBEイミディエイトウィンドウ関数10

a=[A1]:?p(a)*(p(a-2)Or p(a+2))

ヘルパー機能

Function p(n)
p=n>2
For i=2To n-1
p=IIf(n Mod i,p,0)
Next
End Function

または、122バイト

コード

再帰的素数チェック関数ベースのソリューション

a=[A1]:?-1=Not(p(a,a-1)Or(p(a-2,a-3)*p(a+2,a+1)))

ヘルパー機能

Function p(n,m)
If m>1Then p=p(n,m-1)+(n Mod m=0)Else p=n<=0
End Function

0

PHP、Mayubeのおかげで85バイト、24バイト

e($n){return f($n)&&((f($n-2)||f($n+2)))
f($n){for($i=$n;--$i&&$n%$i;)return $i==1;}

これは、両方の関数の名前をそれぞれ1文字に変更することでかなりゴルフできます(eg aおよびb
-Skidsdev

2
PHPはfunctionもうキーワードを必要としませんか?
タイタス


0

Japt、13バイト

j ©[U+2U-2]dj

戻り値truefalse数が素数の双子ペアの一部であるかどうかについて。

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

説明

暗黙: U =入力整数

j ©

入力が素数かどうかを確認します(j)、AND(©)ます...

[U+2U-2]dj

配列を使用する [U+2, U-2]dて、素数関数(j)に従って、項目が真()であるかどうかを確認します。

のブール結果の暗黙的な出力is input prime AND is any ±2 neighbor prime


うーん... [U+2U-2]ずっと短くなりそうな気がしますが、どうしたらいいかわかりません
...-ETHproductions
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.