Tulis program atau fungsi yang menampilkan / mengembalikan 10.000 nomor prima yang diindeks perdana.
Jika kita menyebut n th prima p(n)
, daftar ini adalah
3, 5, 11, 17, 31, 41, 59 ... 1366661
karena
p(p(1)) = p(2) = 3
p(p(2)) = p(3) = 5
p(p(3)) = p(5) = 11
p(p(4)) = p(7) = 17
...
p(p(10000)) = p(104729) = 1366661
Celah standar dilarang, dan metode keluaran standar diizinkan. Anda dapat menjawab dengan program lengkap, fungsi bernama, atau fungsi anonim.
Jawaban:
MATLAB / Oktaf, 25 byte
Tidak jauh lebih mudah dari ini.
sumber
Python, 72 byte
Ini berakhir dengan "daftar indeks di luar jangkauan kesalahan" setelah mencetak angka 10000, yang diizinkan secara default .
Menggunakan metode Teorema Wilson untuk menghasilkan daftar
l
bilangan prima hingga perdana ke-10.000. Kemudian, cetak bilangan prima dengan posisi dalam daftar, bergeser 1 untuk pengindeksan nol, sampai kita kehabisan batas setelah perdana ke-10.000 perdana.Dengan mudah, batas atas
1366661
dapat diperkirakan seperti82e5/6
apa1366666.6666666667
, menghemat char.Saya ingin metode loop tunggal, mencetak bilangan prima yang diindeks saat kami menambahkannya, tetapi tampaknya lebih lama.
sumber
J, 11 byte
Output bilangan prima dalam format
Penjelasan
sumber
Mathematica,
262523 byteFungsi murni mengembalikan daftar.
sumber
Listable
sangat sederhanaPrime@Prime@Range@1*^4&
akan dilakukan@
operator memiliki prioritas lebih tinggi daripada^
saat menulisRange@10^4
? Itu matematika klasik yang mengacaukan permainan golf Anda. Trik bagus!Haskell, 65 byte
Output:
[3,5,11,17,31,41,59,67,83,109,127.....<five hours later>...,1366661]
Tidak terlalu cepat. Cara kerjanya:
p
adalah daftar bilangan prima tak terbatas (secara naif memeriksa semuamod x y
s untuk y in[2..x-1]
). Ambil10000
elemen pertama dari daftar yang Anda dapatkan saat0:p!!
(dapatkan elemen ke-np
) dipetakanp
. Saya harus menyesuaikan daftar bilangan prima di mana saya mengambil elemen dari dengan menambahkan satu nomor (->0:
), karena fungsi indeks (!!
) berbasis nol.sumber
PARI / GP, 25 byte
sumber
AWK - 129 byte
... oookay ... terlalu lama untuk memenangkan poin untuk kekompakan ... tapi mungkin itu bisa mendapatkan kehormatan untuk kecepatannya?
The
x
File:Berlari:
Dapat dibaca:
Program ini menghitung aliran bilangan prima menggunakan
L
sebagai "pita angka" memegang bilangan prima ditemukan melompatL
untuk menandai nomor-nomor terdekat yang sudah diketahui memiliki pembagi. Primer melompat ini akan maju sementara "pita angka"L
dipotong nomor dengan angka dari awal.Sementara memotong kepala kaset
L[n]
menjadi kosong berarti tidak ada pembagi (prime) yang diketahui.L[n]
memegang nilai berarti, nilai ini prima dan dikenal untuk membagin
.Jadi, kami telah menemukan pembagi utama atau perdana baru. Kemudian perdana akan maju ke berikutnya
L[n+m*p]
pada rekaman ditemukan kosong.Ini seperti Saringan Eratosthenes "ditarik melalui botol Klein". Anda selalu bertindak atas rekaman itu. Alih-alih menembakkan beberapa bilangan prima melalui pita, Anda menggunakan bilangan prima yang sudah ditemukan sebagai kursor yang melompat menjauh dari pita mulai dari berbagai jarak nilainya sendiri sampai posisi bebas ditemukan.
Sementara loop luar menghasilkan satu prime atau tidak prime decission per loop, bilangan prima yang ditemukan dihitung dan disimpan
P
sebagai kunci, nilai pasangan (kunci, nilai) ini tidak relevan untuk aliran program.Jika kunci mereka
i
kebetulanP
sudah di (i in P
), kami memiliki prima dari jenis p (p (i)).Berlari:
Memperhatikan bahwa kode ini tidak menggunakan tabel prime prakalkulasi eksternal.
Waktu yang dihabiskan untuk Thinkpad T60 lama saya yang baik, jadi saya pikir pantas untuk dipanggil cepat.
Diuji dengan
mawk
dangawk
pada Debian8 / AMD64sumber
CJam, 19
Anda dapat mencobanya secara online , tetapi Anda perlu sedikit kesabaran: hlm
Sebagai catatan, angka terakhir adalah 1366661.
sumber
Perl, 55 byte
Penggunaan @DanaJ 's
Math::Prime::Util
modul untuk perl (sarat dengan pragma yangntheory
). Dapatkan dengan:sumber
05AB1E, 7 byte (tidak bersaing)
Kode:
Cobalah online! , perhatikan bahwa saya telah mengubah
4
menjadi2
. Jika Anda memiliki banyak waktu, Anda dapat mengubah2
kembali4
, tetapi ini akan memakan banyak waktu. Saya perlu kencangkan algoritma untuk ini.Penjelasan:
sumber