Baru-baru ini saya membaca novel "The Solitude of Prime Numbers" di mana karakter utama agak dibandingkan dengan bilangan prima kembar (" selalu bersama, tetapi tidak pernah menyentuh ").
Sebuah prima kembar adalah bilangan prima yang baik 2 kurang atau lebih dari 2 nomor lainnya prima -misalnya, pasangan prima kembar (41, 43). Dengan kata lain, prime kembar adalah prime yang memiliki kesenjangan utama dua. Terkadang istilah twin prime digunakan untuk sepasang bilangan prima kembar; nama alternatif untuk ini adalah kembar prima atau pasangan prima. Wikipedia
Meskipun saya tidak terlalu menyukai novel yang menyedihkan itu, dan karena saya telah jatuh ke dalam PPCG belakangan ini, hal itu menimbulkan pertanyaan di benak saya ...
Tugas:
Dengan bilangan bulat positif N> 4, temukan bilangan prima yang kesepian ( bilangan prima terisolasi AKA ) di antara pasangan terdekat bilangan prima kembar .
Harap dicatat bahwa dalam hal ini dengan istilah bilangan prima kesepian , maksud saya semua bilangan prima yang bukan bilangan prima kembar dan antara pasangan bilangan prima kembar . Itu sebabnya N> 4 karena dua pasangan pertama dari bilangan prima adalah (3, 5) dan (5, 7).
Contoh:
- N = 90.
- Temukan dua pasangan pertama kembar prima <N dan> N. Mereka adalah: (71, 73) dan (101, 103).
- Temukan bilangan prima kesepian dalam kisaran> 73 dan <101.
- Mereka adalah: 79, 83, 89, 97.
Kasus khusus:
- Jika N ada di antara dua bilangan prima kembar, temukan pasangan terdekat bilangan prima kembar> N + 1 dan <N-1. Contoh: N = 72, cari pasangan prima kembar terdekat> 73 dan <71 kemudian kecualikan dari daftar 71 dan 73 karena mereka bukan primes kesepian . Jadi untuk N = 72 hasil yang diharapkan adalah: 67,
71,73, 79, 83, 89, 97 - Jika N termasuk pasangan prima kembar, misalnya N = 73, pasangan terdekat prima kembar adalah (71, 73) dan (101, 103). Jika N = 71, pasangan terdekat dari prima kembar adalah (59, 61) dan (71, 73).
Kasus uji:
N = 70 > Lonely primes are: 67
N = 71 > Lonely primes are: 67
N = 72 > Lonely primes are: 67, 79, 83, 89, 97 (not the twins 71 and 73)
N = 73 > Lonely primes are: 79, 83, 89, 97
N = 90 > Lonely primes are: 79, 83, 89, 97
N = 201 > Lonely primes are: 211, 223
N = 499 > Lonely primes are: 467, 479, 487, 491, 499, 503, 509
Aturan:
- Tulis program atau fungsi lengkap yang akan mengambil angka N dari input standar.
- Keluarkan daftar primes kesepian dalam format yang dapat dibaca sebagai csv, daftar, array, dll.
- Kode terpendek menang.
- Harap sertakan (bila mungkin) biola daring yang dapat diuji.
Jawaban:
Sebenarnya, 47 byte
Solusi ini berkaitan dengan kasus di mana
n
berada di antara dua bilangan prima kembar, dengan memeriksa apakah batas bawah adalah lebih besar dari sepasang bilangan prima kembar (menghilangkan bilangan prima kembar di sebelah kiri kita dari menjadi batas bawah kita) dan jika batas atas adalah yang lebih kecil dari sepasang bilangan prima kembar (menghilangkan bilangan prima kembar di sebelah kanan kita agar tidak menjadi batas atas kita). Untuk mencegah bilangan prima kembar dari dimasukkan dalam jangkauan kami setelah kami memiliki batas bawah dan atas, kita perlu menghapus bilangan prima dip
manap-2
ORp+2
adalah prima, maka OR logis dan negate dalam kode.Ini agak panjang dan mungkin bisa bermain golf lebih lanjut. Saran bermain golf diterima. Cobalah online!
Tidak melakukanolf
sumber
23
saat input24
diberikan. Batas utama kembar harus17 / 19
dan29 / 31
, dan23
merupakan prime terisolasi dalam kisaran19 .. 29
.p
mengatakan25
prima belum diperbaiki, atau Dennis belum menarik Sebenarnya sejak perbaikan bug. Biarkan aku periksa.PowerShell v2 +,
237149147231216181174169166 byteMengambil input
$n
. Menentukan fungsi baruf
sebagai fungsi prime regex (di sini mengembalikan Boolean jika inputnya prima atau tidak).Bagian berikutnya ditetapkan
$i
sama dengan$n
, kemudian loop ke atas sampai kita menemukan setengah bagian bawah dari pasangan utama kembar kita. Misalnya, untuk input90
, ini berhenti di$i=101
.Kemudian, kita loop dari batas atas ke bawah. Saya tahu, ini kelihatannya seperti infinite loop, tetapi akhirnya akan berakhir.
Jika jumlah saat ini adalah perdana (
f(--$i)
), tapi yang+/- 2
tidak prima, kita tambahkan$i
ke pipa. Namun, jika itu+/- 2
adalah prime, kami memeriksa apakah kami lebih rendah dari$n-1
(yaitu, untuk memperhitungkan situasi ketika itu di dalam pasangan prime kembar), pada titik mana kamiexit
. Pada penyelesaian program, pipa dicetak ke layar melalui implisitWrite-Output
.NB - Karena struktur pengulangan, mencetak bilangan prima dengan urutan menurun. OP telah mengklarifikasi tidak apa-apa.
Contohnya
Keluaran di sini dipisahkan dengan ruang, karena itulah metode stringifikasi default untuk array.
sumber
Haskell, 105 byte
Cobalah secara Online
sumber
JavaScript,
186183168158 Bytessumber
PHP, 207 byte
4754 byte untukis_prime
fungsi yang tidak dimiliki PHP. Saya akan mengalahkan Mathematica tanpa itu. :-Djalankan bersama
-r
. mencetak koma jejak.kerusakan
Catatan :
The
is_prime
fungsi benar-benar kembalitrue
untuk$n<2
; tapi setidaknya itu tidak menghasilkan peringatan. Masukkan$n=
sebelum$n>1
untuk memperbaikinya.sumber
Mathematica,
169157 bytesumber
Racket 228 byte
Kerugian dari versi ini adalah ia menemukan semua bilangan prima hingga N dan bukan hanya yang di sekitar N.
Versi tidak disatukan:
Pengujian:
Keluaran:
sumber
Racket 245 byte
Versi tidak disatukan:
Keluaran:
sumber
Python 2.7: 160 byte
saran dipersilahkan :)
sumber