Diberi nomor N, tantangannya adalah mendapatkan jumlah piramida bilangan prima N. Untuk memperjelas hal-hal, berikut adalah contohnya:
Input: 4
Kami akan membuat daftar 4
bilangan prima pertama , dan kemudian menghitung jumlahnya. Setelah itu, kami akan menghitung jumlah dari jumlah tersebut, dan seterusnya:
2
> 5
3 > 13
> 8 > 33
5 > 20
> 12
7
Anda dapat melihat bahwa hasil akhirnya adalah 33 . Ini adalah contoh lain, dengan N = 8:
2
> 5
3 > 13
> 8 > 33
5 > 20 > 83
> 12 > 50 > 205
7 > 30 > 122 > 495
> 18 > 72 > 290 > 1169
11 > 42 > 168 > 674
> 24 > 96 > 384
13 > 54 > 216
> 30 > 120
17 > 66
> 36
19
Anda dapat melihat bahwa hasil akhirnya adalah 1169 .
Ini adalah contoh lain dengan N ganjil, N = 3:
2
> 5
3 > 13
> 8
5
Ini memberi kita 13 sebagai hasilnya
Tugas Anda adalah menulis program atau fungsi, yang membutuhkan bilangan bulat lebih besar dari 0, dan menampilkan hasil akhirnya.
Inilah beberapa hasil tes:
1: 2
2: 5
3: 13
4: 33
5: 83
6: 205
7: 495
8: 1169
9: 2707
10: 6169
11: 13889
12: 30993
13: 68701
14: 151469
15: 332349
16: 725837
17: 1577751
18: 3413221
19: 7349029
20: 15751187
21: 33616925
22: 71475193
23: 151466705
24: 320072415
25: 674721797
26: 1419327223
27: 2979993519
28: 6245693407
29: 13068049163
30: 27297614797
31: 56929779663
32: 118543624847
33: 246475746269
34: 511766428817
35: 1061264813321
36: 2198298700845
37: 4548996804811
38: 9405003164065
39: 19429190057417
40: 40107799133677
41: 82736199371081
42: 170553108953473
43: 351333736092089
44: 723224546040181
45: 1487710742395387
46: 3058157261678325
47: 6282142186547177
48: 12896743408107403
49: 26460652594917673
50: 54262186256186881
51: 111224391050741687
52: 227896496141836195
53: 466805185374509003
54: 955904519939662217
55: 1956988697590280537
56: 4005572366722212927
57: 8196803221276230093
58: 16769645303734608963
59: 34300013739423719561
60: 70136585692535099353
61: 143371352962891226373
62: 292978031452308375001
63: 598482012866917021541
64: 1222083126601616763473
65: 2494459637841415902073
66: 5089478703050176444803
67: 10379794709536133386939
68: 21160351440305258275579
69: 43119914481530819445497
70: 87833066190052490228187
71: 178841897161848754603319
72: 364014682565128163812791
73: 740654046243174781813209
74: 1506496270380756958474835
75: 3063280375436290387756263
76: 6227039507615221644290617
77: 12655020557561801933128885
78: 25712267089927372837530869
79: 52230425385198423845305957
80: 106076955379202815098486497
81: 215397386589448754140867649
82: 437308717912632286770415395
83: 887706233370396897803709611
84: 1801721089699452657985592689
85: 3656329898231436156162865559
86: 7418972676822310377574227797
87: 15051599987013574096449515927
88: 30532404546282900804722616529
89: 61926565462373271494414919017
90: 125582269494835615524470915169
91: 254631689768733901573206365479
92: 516210444730946464864091626473
93: 1046330617753410129672316234861
94: 2120493010460433691014704829565
95: 4296639990460140795780826898943
96: 8704509990931940668688755806845
97: 17631229933967301681217551193565
98: 35706243541395815998303171050377
99: 72298621492552303967009812018997
Ini adalah kode-golf , sehingga jumlah byte terpendek menang!
[1169]
untuk8
) dapat diterima?Jawaban:
J, 15 byte
Penjelasan:
Pada dasarnya sama dengan jawaban Mathematica saya .
sumber
Mathematica,
383635 bytesumber
Minkolang 0,14 , 17 byte
Coba di sini dan periksa semua test case di sini .
Penjelasan
Saya pada dasarnya menggunakan algoritma yang sama dengan beberapa jawaban sebelumnya yang menggunakan koefisien binomial. Setiap kali Anda melihat piramida angka yang ditambahkan, segitiga Pascal harus menjadi hal pertama yang terlintas dalam pikiran. Saya tidak melihat ada jawaban lain yang menjelaskan mengapa ini berhasil, jadi saya akan melakukannya.
LEBIH BANYAK penjelasan
Seperti yang Anda lihat, bilangan prima
2,3,5,7
muncul1,3,3,1
kali di hasil akhir. Saya akan mengubah tata letak sedikit.Jumlah kali yang
3
akan berkontribusi pada hasil akhir sama dengan jumlah jalur dari3
ke sudut kiri atas, hanya bergerak ke atas dan ke kiri . Di sini, ada tiga jalur untuk3
:Perhatikan bahwa saya dapat membalikkan arah tanpa kehilangan keumuman. Jadi saya ingin tahu berapa banyak jalur yang ada dari sudut kiri atas ke setiap posisi di sepanjang tepi bergerigi. Saya bisa menghitungnya seperti ...
Untuk setiap angka dalam segitiga ini, jika X unit dari kiri dan Y unit dari atas, maka angka pada posisi itu adalah
Cara saya menggunakannya,
X+Y = N
adalah konstan danX
berkisar dari 0 hinggaN
, yang berjalan sepanjang satu diagonal. Saya gandakan setiap koefisien dengan bilangan prima yang sesuai dan kemudian tambahkan semuanya.Lihat artikel Wikipedia tentang segitiga Pascal untuk informasi lebih lanjut tentang ini.
sumber
JavaScript ES7 107
Menyalahgunakan batas tetap pada 27 - betapa membosankan sebenarnya menemukan bilangan prima.
Cuplikan uji (menggunakan pemahaman array, hanya akan berfungsi di Firefox)
sumber
Pyth, 18 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
s*V.cLtQUQ.f}ZPZQ0
Pyth -
1615 byteKurangi penggunaan dan
first_n
filter.Test Suite .
sumber
Pyth, 16 byte
Sebenarnya sangat sederhana:
sumber
Haskell, 74 byte
Contoh penggunaan:
Cara kerjanya: berulang kali menghitung jumlah tetangga dari semua bilangan prima. Ambil kepala
n
iterasi ke-4.Karena operator indeks
!!
berbasis nol, saya membuat daftar kosong untuk menghindari keharusan menggunakan!!(n-1)
.sumber
Matlab, 76 byte
Terima kasih kepada David karena telah menghemat banyak byte!
Versi lama, 98 byte
sumber
x
menggunakanx=primes(103);
menyimpan beberapa byte, karena Anda hanya perlu naik keN=27
(dan tidak masalah jikax
memiliki lebih banyak entri daripada yang Anda butuhkan).conv
adalah ide yang bagus!JavaScript (ES6), 121 byte
Penjelasan
Sebagian besar ukuran berasal dari menemukan bilangan prima.
Uji
Tampilkan cuplikan kode
sumber
Utilitas Shell + GNU dan BSD, 92
sumber
Serius, 23 byte
Output hasilnya sebagai daftar panjang 1:
8 -> [1169]
Cobalah online
Penjelasan:
sumber
Mathematica 73 byte
Bagaimana itu bekerja
Prime@n~Table~{n,#}&
memberikan daftar#
bilangan prima pertama .Partition[#,2,1]&
menata ulang daftar angka,{a, b, c, d ...}
sebagai{{a,b}, {b,c}, {c,d}...}}
.Plus@@@
lalu kembali{a+b, b+c, c+d...}
.NestWhile
dimulai dengan daftar#
bilangan prima dan berulang kali berlakuPlus@@@Partition...
selama ada lebih dari satu nomor dalam daftar.Dibutuhkan sekitar 1/5 detik untuk menyelesaikan untuk 1000 primes pertama.
sumber
Python 2, 159 byte
sumber
print
perintah di dalam loop? Apakah Anda tidak ingin mencetak sekali saja, pada akhirnya?Bima Sakti 1.4.8 ,
2625 byteJawaban ini tidak bersaing. Beberapa operasi dibuat setelah pertanyaan ini diposting (tetapi belum tentu untuk tantangan ini).
Saya dapat menghapus byte setelah membaca komentar. Output adalah daftar elemen tunggal.
Penjelasan
Pemakaian
sumber
Ceylon, 169 byte
Ini mendefinisikan dua fungsi -
s
menghitung jumlah piramida dari suatu urutan bilangan bulat, sambilp
menyebut ini pada urutann
bilangan prima pertama .Sepertinya sekitar setengah ukuran menemukan
n
bilangan prima pertama , setengah lainnya menghitung jumlah piramida.Ini adalah versi yang diformat / dikomentari:
sumber
Jelly , 7 byte
Cobalah online!
Awalnya saya menulis jawaban Brachylog
1<|~lṗᵐ≠≜{s₂ᶠ+ᵐ}ⁱ~g
, tetapi ketika keluar menjadi 19 byte saya memutuskan bahwa saya mungkin harus mencoba bahasa yang berbeda.Rupanya, pemetaan atas angka memperlakukannya sebagai rentang dari 1 hingga inklusif, dan bilangan bulat lebih besar daripada daftar atau apa pun
''
itu.sumber
APL (NARS), 41 karakter, 82 byte
Dalam input jika seseorang ingin menggunakan angka besar harus memasukkan tipe number_x sebagai 47x. Mungkin ada sesuatu yang tidak beres: saya di sini menulis bahwa n primes ada di set 1..n ^ 2 Test:
sumber
Perl 6 , 52 byte
Cobalah online!
Blok kode anonim yang mengambil argumen dan mencetak daftar satu elemen yang berisi hasilnya.
sumber
Stax , 13 byte
Jalankan dan debug itu
sumber