Postulat Bertrand menyatakan bahwa untuk setiap bilangan bulat n ≥ 1 ada setidaknya satu prime p sehingga n <p ≤ 2n . Untuk memverifikasi teorema ini untuk n <4000 kita tidak perlu memeriksa 4000 kasus: Trik Landau mengatakan cukup untuk memeriksa bahwa
2, 3, 5, 7, 13, 23, 43, 83, 163, 317, 631, 1259, 2503, 5003
semuanya prima. Karena masing-masing angka ini kurang dari dua kali pendahulunya, setiap interval {y: n <y ≤ 2n} mengandung setidaknya satu dari bilangan prima tersebut.
Urutan angka ini adalah Bertrand Primes (OEIS A006992) dan didefinisikan sebagai berikut:
a(1) = 2
a(n) = largest prime below 2a(n-1)
Tantangan
Terapkan urutan ini. Anda bisa menulis
- sebuah fungsi atau program yang diberi beberapa pengembalian n a (n) (0 atau 1 diindeks),
- fungsi atau program yang memberikan beberapa n mengembalikan entri pertama n (atau n-1 atau n + 1 ) dari urutan ini,
- daftar atau aliran tanpa batas atau generator atau yang serupa di bahasa Anda.
Fx.ØØ
begitu dekat ... Berfungsi untuk apa pun di atasn > 2
.$F·ÅPθ
untuk jumlah byte yang sama.Haskell , 50 byte
Cobalah online!
Menghasilkan daftar yang tak terbatas.
Haskell , 40 byte?
Cobalah online!
Ini berfungsi jika bilangan prima Bertrand tidak mengandung pseudoprim Fermat apa pun untuk 2 .
sumber
Jelly , 6 byte
Cobalah online!
Diindeks 0.
Penjelasan
sumber
MATL , 9 byte
Input n , output a ( n ), 1-diindeks.
Cobalah online!
Penjelasan
sumber
Stax , 10 byte
Jalankan test case
Masalah ini telah mengekspos bug dalam implementasi stax
:p
, yang merupakan instruksi yang mendapatkan prime terbesar lebih kecil dari inputnya. Jika bekerja dengan benar, akan ada solusi56 byte.Tapi sayangnya, tidak, dan tidak ada.Sebagai pembuat bahasa, saya akan memperbaikinya, tetapi sepertinya murah untuk memperbaikinya dan menggunakannya setelah masalah diposting.Bagaimanapun, ini adalah representasi ascii yang sesuai dari program di atas.
Ini adalah implementasi yang relatif lurus dari pernyataan masalah. Satu-satunya hal yang mungkin menarik tentang itu adalah penggunaan
gs
bentuk generator. Generator adalah keluarga konstruksi yang menggabungkan kondisi awal, transformasi, dan filter, untuk menghasilkan satu atau lebih nilai yang memuaskan. Dalam hal ini, ini digunakan sebagai pengganti:p
instruksi yang rusak .Sunting: inilah solusi 6 byte, tetapi membutuhkan perbaikan bug yang hanya diterapkan setelah tantangan ini diposting.
sumber
Python 2 , 63 byte
Cobalah online!
Mencetak selamanya.
Menggunakan generator utama Teorema Wilson meskipun menghasilkan bilangan prima ke depan kikuk untuk masalah ini. Melacak prime terbesar saat ini yang terlihat
r
dan batas penggandaanm
.Dua byte disimpan dengan melakukan
P*=k
daripadaP*=k*k
seperti biasanya, karena satu-satunya efek adalah untuk mengklaim bahwa 4 adalah prima, dan urutan penggandaan melewatkannya.sumber
CJam (15 byte)
Demo online . Perhatikan bahwa ini diindeks 0.
Pendekatan yang lebih efisien adalah dengan mencari mundur, tetapi ini membutuhkan satu karakter lebih karena tidak dapat menggunakan implisit
,
(kisaran):sumber
Japt ,
16141312 byteDua solusi untuk harga satu, keduanya 1-diindeks.
Istilah ke-N
Akhirnya, sebuah tantangan saya bisa menulis solusi untuk digunakan
F.g()
.Cobalah
Ketentuan N Pertama
Cobalah
sumber
Pari / GP , 34 byte
Cobalah online!
sumber
Python 2 , 64 byte
Cobalah online! Mencetak urutan tanpa batas
sumber
Haskell , 58 byte
Cobalah online!
sumber
Python 2 , 68 byte
Mencetak urutan tanpa batas (Anda harus mengklik "Jalankan" kedua kalinya untuk menghentikan eksekusi).
Cobalah online!
Python 3 , 90 byte
Mengembalikan istilah ke- n .
Cobalah online!
sumber
C (gcc) ,
9787868079 byteP
ke dalam loop utama.printf
panggilan.i
entri urutan-ke-10 (diindeks 0) alih-alih menghasilkan aliran yang tidak pernah berakhir.Cobalah online!
sumber
Attache , 38 byte
Cobalah online!
Berbasis 0; mengembalikan
n
bilangan prima Bertrand.Saat ini tidak ada builtin untuk menemukan bilangan prima sebelumnya / berikutnya, jadi saya menggunakan
Series
builtin untuk menghitung semua bilangan prima hingga2*$[_-1]
. Ungkapan terakhir ini menggunakan rekursi implisit (terikat$
) untuk dengan mudah mendefinisikan relasi perulangan. Kondisi if digunakan untuk menentukan kondisi dasar.sumber
Perl 6 , 35 byte
Cobalah online!
Ungkapan ini adalah daftar bilangan prima Bertrand yang tak terbatas.
sumber
Retina , 39 byte
Cobalah online! Penjelasan:
Mulai dengan 1.
Ulangi loop menggunakan input sebagai jumlah loop.
Gandakan nilainya.
Temukan prime tertinggi kurang dari nilainya.
Cetak itu.
sumber
Ruby , 51 + 7 (-rprime) = 58 byte
Cobalah online!
Lamba yang menerima
n
dan mengembalikannth
Bertrand prime, diindeks 0. Tidak banyak di sini, tapi biar saya ungolf itu:Ruby , 48 + 7 = 55 byte
Cobalah online!
Untuk bersenang-senang, inilah solusi loop tak terbatas. Ini mencetak saat berjalan, dan membutuhkan interupsi. Bergantung pada kapan tepatnya Anda menyela, Anda mungkin atau mungkin tidak melihat hasilnya. Tidak Disatukan:
sumber
APL (Dyalog Extended) , 12 byte
Mengambil input dari pengguna sebagai N, mengembalikan elemen N urutan (0-diindeks).
Cobalah online!
Penjelasan:
sumber
R , 87 byte
n
Output yang diberikana(n)
Cobalah online!
Saya masih mengerjakan "Diberikan n keluaran a (1), a (2) ... a (n)". Saya pikir saya hanya bisa memodifikasi kode ini sedikit, tetapi tampaknya lebih sulit dari itu.
sumber