Bilangan prima ada di mana-mana ...
mereka bersembunyi di dalam Pi
3.141592653 58979 3238 462643 3832 795028841 971693993751
Mari kita dapatkan bilangan prima itu!
Tantangan
Diberikan sebagai input bilangan bulat n>0
, cari tahu berapa bilangan prima yang disembunyikan di dalam n
digit pertamaPi
Contohnya
Karena n=3
kita harus mencari bilangan prima di [3,1,4]
. Ada 2 Primes (3,31)
, sehingga kode Anda harus keluaran 2
Untuk n=10
, pertama 10 digit yang [3,1,4,1,5,9,2,6,5,3]
dan kode Anda harus output 12
karena [2, 3, 5, 31, 41, 53, 59, 653, 4159, 14159, 314159, 1592653]
disembunyikan (dan ditemukan!)
Uji Kasus
input -> output
1->1
3->2
13->14
22->28
42->60
50->93
150->197
250->363
500->895
Aturan
Kode Anda harus dapat menemukan semua bilangan prima setidaknya untukn=50
Ya, Anda dapat meng-hardcode 50 digit pertama Pi
jika Anda suka
Entri hardcoding jawaban tidak valid
Ini adalah kode-golf. Jawaban terpendek dalam byte menang!
Jawaban:
05AB1E ,
108 byte-2 byte terima kasih kepada Adnan (
p
vectoris)Cobalah online! (akan bekerja hingga n = 98413 tetapi akan sangat lambat bahkan untuk n = 50 karena kebutuhan untuk menguji jumlah besar untuk primality - TIO time out pada 60 detik untuk n = 50.)
Bagaimana?
sumber
<žsþŒÙpO
seharusnya bekerja selama 8 bytep
vektorisasi terima kasih!Mathematica, 76 byte
sumber
Tr[1^...]
Itu cara yang cerdas untuk menemukan panjang daftar, bagus!Mathematica,
1049790 byteHahahaha, saya berhasil membuat ini berhasil. Saya tidak tahu cara menggunakan Mathematica. XD
Memasukkan:
sumber
50 96
OP mengatakan 50 digit berisi 93 bilangan prima, jadi akurasi Sympy mungkin tidak aktif ..?Python 3 ,
274237207194189 byte-37 byte, terima kasih kepada Wheat Wizard! -14 byte terima kasih kepada Mr.Xcoder.
Hardcode 50 digit pertama pi tetapi secara manual menghitung semua yang lain.
Cobalah online!
sumber
l=list("31415...)
harus menghemat ~ 40 karakter. Dan perubahan itu memungkinkan Anda menggantimap(str,i)
dengan adili
.len(l)
R,
156123 byteSolusi super menarik. Bekerja pada yang tepat.
Disimpan 33 byte berkat @Giuseppe.
R (+ angka dan gmp), 198 byte
Solusi yang tepat. Dibawa
n
sebagai input.Menggunakan
numbers::dropletPi(50)
untuk menghasilkan 50 tempat desimal pertama dari pi.gsub
menghilangkan titik desimal.substring
membutuhkan setiap kemungkinan substring (kejutan kejutan) pi hinggan
.Daftar kembali diratakan dan diubah menjadi
gmp
'sbigz
Format. Format ini diperlukan untuk menyimpan bilangan bulat dengan panjang 50.unique
mengambil nilai unik dari vektor itu. Hasil ini disimpan dix
.Lalu kami memeriksa keutamaan. Ini rumit, karena ada banyak kasus tepi dan gangguan:
Untuk tinggi
n
, ada0
di pi. Ini mengarah ke substring dengan nol di depannya.as.bigz
menghasilkanNA
dengan itu, yang harus dihapus.Pada catatan yang sama, substring
"0"
akan macetgmp::factorize
, jadi harus dihapus juga.Untuk
n=1
,x = 3
. Yang dengan sendirinya ok, tapibigz
representasi3
iterable, jadisapply
akan bingung dan melaporkan 16 bilangan prima. Untuk tujuan ini kami mengambil minimum dari panjang vektorx
, dan jumlah bilangan prima di dalamnya.gmp::isprime
tampaknya tidak bisa menangani angka-angka besar dengan andal. Jadi alih-alih kita menggunakangmp::factorize
dan mengecek panjang outputnya adalah 1.Jadi secara keseluruhan, kami menghapus
0
danNA
darix
. Kami memfaktisasi semuax
dan memeriksa panjangnya. Kami menghitung jumlah kemunculan1
dan mengembalikanmin(occurences, length(x))
.sumber
cumsum(c(1,1,0,1,1,4,1,0,0,3,0,0,2,7,3,1,0,3,0,0,0,0,0,0,4,1,0,6,0,3,2,0,0,0,0,0,0,4,3,3,6,0,4,8,2,5,3,6,0,5))
bukan vektor Anda untuk 123 byte :)Jelly ,
5932 byte-27 byte terima kasih kepada Erik the Outgolfer.
Cobalah online!
Penjelasan
sumber