Apakah saya memiliki saudara kembar utama?


23

Integer adalah prima jika dan hanya jika itu positif dan memiliki tepat 2 pembagi yang berbeda: 1 dan itu sendiri. Sepasang prime kembar terbuat dari dua elemen: pdan p±2, keduanya adalah prime.

Anda akan diberikan bilangan bulat positif sebagai input. Tugas Anda adalah mengembalikan kebenaran / kepalsuan tergantung pada apakah bilangan bulat yang diberikan milik pasangan kembar, mengikuti standar aturan (nilai-nilai harus konsisten).

Uji Kasus

  • Truthy (Twin Primes): 3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 43

  • Falsy (bukan Twin Primes): 2, 15, 20, 23, 37, 47, 97, 120, 566

Ini adalah , jadi kode terpendek dalam byte menang!


Apakah 13 kembar utama?
— LiefdeWen

@LiefdeWen Ya, karena itu milik pasangan (11, 13)
— daniero

Jawaban:



11

Jelly , 10 9 byte

%6+_2_ÆP⁺

Cobalah online!

Latar Belakang

Dengan pengecualian (3, 5) , semua pasangan utama kembar berbentuk (6k - 1, 6k + 1) .

Sejak (6k - 1) + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 dan
(6k + 1) + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 , diberi input n> 3 , cukup untuk memeriksa apakah n dan n + n% 6 - 3 keduanya prima.

Formula ini terjadi kerja untuk n = 3 juga, seperti 3 + 3% 6-3 = 3 adalah bilangan prima dan 3 adalah prima kembar.

Bagaimana itu bekerja

%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 byte

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

Cobalah online!

Latar Belakang

Semua bilangan bulat mengambil salah satu dari formulir berikut, dengan bilangan bulat k : 6k - 3 , 6k - 2 , 6k - 1 , 6k , 6k + 1 , 6k + 2 .

Karena 6k - 2 , 6k , dan 6k + 2 semuanya genap, dan karena 6k - 3 dapat dibagi dengan 3 , semua bilangan prima kecuali 2 dan 3 harus dalam bentuk 6k - 1 atau 6k + 1 . Karena perbedaan pasangan prime kembar adalah 2 , dengan pengecualian (3, 5) , semua pasangan prime kembar berbentuk (6k - 1, 6k + 1) .

Biarkan n dalam bentuk 6k ± 1 .

  • Jika n = 6k -1 , maka n + n% 6 - 3 = 6k - 1 + (6k - 1)% 6 - 3 = 6k - 1 + 5 - 3 = 6k + 1 .

  • Jika n = 6k + 1 , maka n + n% 6 - 3 = 6k + 1 + (6k + 1)% 6 - 3 = 6k + 1 + 1 - 3 = 6k - 1 .

Jadi, jika n adalah bagian dari pasangan kembar utama dan n ≠ 3 , kembarannya adalah n + n% 6 - 3 .

Bagaimana itu bekerja

Python tidak memiliki tes primality bawaan. Meskipun ada cara-cara singkat untuk menguji satu nomor untuk primality, melakukannya untuk dua nomor akan panjang. Kami akan bekerja dengan pembagi.

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

menghitung berapa bilangan bulat k dalam interval [2, 4n) yang membagi (n + n% 6 - 3) n secara merata, yaitu, menghitung jumlah pembagi dari (n + n% 6 - 3) n dalam interval [2 , 4n) . Kami mengklaim bahwa penghitungan ini adalah 2 jika dan hanya jika n adalah bagian dari pasangan utama kembar.

  • Jika n = 3 (prima kembar), (n + n% 6 - 3) n = 3 (3 + 3 - 3) = 9 memiliki dua pembagi ( 3 dan 9 ) dalam [2, 12) .

  • Jika n> 3 adalah prima kembar, seperti yang terlihat sebelumnya, m: = n + n% 6 - 3 adalah kembarannya. Dalam hal ini, mn memiliki tepat empat pembagi: 1, m, n, mn .

    Sejak n> 3 , kita memiliki m> 4 , jadi 4n <mn dan tepat dua pembagi ( m dan n ) masuk dalam interval [2, 4n) .

  • Jika n = 1 , maka (n + n% 6 - 3) n = 1 + 1 - 3 = -1 tidak memiliki pembagi dalam [2, 4) .

  • Jika n = 2 , maka (n + n% 6 - 3) n = 2 (2 + 2 - 3) = 2 memiliki satu pembagi (sendiri) dalam [2, 8) .

  • Jika n = 4 , maka (n + n% 6 - 3) n = 4 (4 + 4 - 3) = 20 memiliki empat pembagi ( 2 , 4 , 5 , dan 10 ) dalam [2, 16) .

  • Jika n> 4 genap, 2 , n / 2 , dan n semua membagi n dan, oleh karena itu, (n + n% 6 - 3) n . Kami memiliki n / 2> 2 sejak n> 4 , jadi setidaknya ada tiga pembagi dalam [2, 4n) .

  • Jika n = 9 , maka (n + n% 6 - 3) n = 9 (9 + 3 - 3) = 81 memiliki tiga pembagi ( 3 , 9 , dan 21 ) dalam [2, 36) .

  • Jika n> 9 adalah kelipatan dari 3 , maka 3 , n / 3 , dan n semua membagi n dan, karenanya, (n + n% 6 - 3) n . Kami memiliki n / 3> 3 sejak n> 9 , jadi setidaknya ada tiga pembagi dalam [2, 4n) .

  • Akhirnya, jika n = 6k ± 1> 4 bukan prime kembar, baik n atau m: = n + n% 6 - 3 harus komposit dan, oleh karena itu, akui pembagi yang tepat d> 1 .

    Karena n = m + 2 atau m = n + 2 dan n, m> 4 , bilangan bulat d , m , dan n adalah pembagi yang berbeda dari mn . Selanjutnya, m <n + 3 <4n sejak n> 1 , jadi mn memiliki setidaknya tiga pembagi dalam [2, 4n) .


Wow. Kode pendek seperti itu dan begitu banyak kasus khusus yang harus ditangani dengan benar. Adakah alasan Anda mengatakan Python 3? Sejauh yang saya tahu itu juga berfungsi dalam Python 2.
— kasperd

Ya, ini juga akan berfungsi dengan baik di Python 2. 3 adalah bagian dari posting SE yang dihasilkan secara otomatis dari TIO.
— Dennis

5

05AB1E , 10 9 byte

Disimpan 1 byte berkat Datboi

ÌIÍ‚pZIp*

Cobalah online! atau sebagai Test Suite

Penjelasan

Ì           # push input+2
 IÍ         # push input-2
   ‚        # pair
    p       # isPrime
     Z      # max
      Ip    # push isPrime(input)
        *   # multiply

1
Gunakan ÌIÍ‚sebagai ganti 40SÍ+-1 byte
— Datboi

4

PHP, 52 byte

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

tanpa GMP, 84 byte

(menggunakan fungsi utama saya dari stack overflow )

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

Jalankan sebagai pipa dengan -nF. Keluaran kosong untuk kepalsuan, 1untuk kebenaran.

Solusi hebat Dennis porting ke PHP, 56 byte

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

Jalankan sebagai pipa dengan -nRatau coba online .



3

MATL , 11 byte

HOht_v+ZpAa

Output adalah 0atau 1.

Cobalah online!

Penjelasan

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

Retina , 45 44 byte

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

1<`1¶1

Mengembalikan 1 jika inputnya adalah kembar prime, 0 sebaliknya

Cobalah online!

Penjelasan

.*              
$*

Konversikan ke Unary

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

Letakkan n-2, n, dan n + 2 pada baris mereka sendiri

m`^(11+)\1+$   

(Mengikuti baris baru) Hapus semua komposit yang lebih besar dari 1

1<`1¶1          

Periksa apakah ada dua bilangan prima berturut-turut (atau 1,3 karena 3 adalah bilangan prima kembar)


2

Perl 6 , 24 byte

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

Cobalah online!

*adalah argumen untuk fungsi anonim ini. 0 & (-2 | 2)adalah persimpangan yang terdiri dari angka 0DAN baik -2OR 2. Menambahkan *ke persimpangan ini menghasilkan persimpangan nomor *DAN salah satu dari angka * - 2ATAU * + 2. Memanggil is-primemetode pada persimpangan ini mengembalikan nilai kebenaran jika *prima DAN * - 2OR * + 2atau prima. Akhirnya, ?runtuh persimpangan kebenaran ke nilai boolean, memuaskan kondisi nilai-kembali konsisten.


2

JavaScript, 91 byte , 81 byte terima kasih kepada Jared Smith

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))

Penjelasan

pmemberitahu apakah angka yang diberikan nadalah prima atau tidak, dan ttes nomor yang diberikan ndan n±2.

Contoh


Anda tidak perlu var, tanda kurung di ndalam definisi fungsi, dll.
— Jared Smith

Saya pikir Anda dapat mengedit cuplikan Anda untuk menunjukkan nilai ndi samping nilai t(n)kejelasan yang meningkat (Eg. 7: true)
— Taylor Scott

1
Terima kasih untuk kalian berdua
— Serge K.

1

J, 23 byte

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

Cobalah online!

bagaimana?

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 byte dengan3>0#.@p:0 2 _2&+
— mil

@miles bagus. penggunaan yang sangat pintar dari basis 2 untuk memproses hasilnya.
— Jonah



1

JavaScript (ES6), 54 byte

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


1

Excel VBA, 102 100 Bytes

Tidak ada built-in primality untuk VBA :(

Kode

Fungsi jendela langsung VBE anonim yang mengambil input dari sel [A1]dan output baik 1(benar) atau 0(salah) ke jendela Segera VBE

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

Fungsi Penolong

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

Atau, 122 Bytes

Kode

Solusi berbasis fungsi pemeriksaan primitif rekursif

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

Fungsi Penolong

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

0

PHP, 85 byte 24 byte berkat Mayube

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

Ini dapat di-golf dengan mengubah nama kedua fungsi menjadi masing-masing 1 karakter (mis. aDan b)
— Skidsdev

2
Bukankah PHP membutuhkan functionkata kunci lagi?
— Titus


0

Japt , 13 byte

j ©[U+2U-2]dj

Pengembalian truedan falseuntuk apakah nomor tersebut merupakan bagian dari pasangan kembar utama.

Cobalah online!

Penjelasan

Tersirat: U= input integer

j ©

Periksa apakah inputnya prima ( j), DAN ( ©) ...

[U+2U-2]dj

Menggunakan array [U+2, U-2], periksa apakah ada item yang benar ( d) sesuai dengan fungsi primality ( j).

Output implisit dari hasil boolean dari is input prime AND is any ±2 neighbor prime.


Hmm ... Saya merasa [U+2U-2]bisa lebih pendek, tapi saya tidak tahu bagaimana ...
— ETHproduksi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.