Misalkan kita mulai dengan daftar bilangan prima yang tak terbatas:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, ...
Kemudian, kami mengambil perbedaan absolut antara setiap pasangan angka, berulang kali:
[1, 2, 2, 4, 2, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, 2, 6, 4, ...
[1, 0, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 0, 4, 4, 2, ...
[1, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 4, 0, 2, ...
[1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 4, 2, ...
Perhatikan bahwa angka yang memimpin adalah 1 setiap kali. Gilbreath's Conjecture adalah prediksi bahwa ini terus menjadi kasus selamanya.
Satu-satunya cara nomor utama berhenti menjadi 1 adalah jika nomor berikutnya setelah bukan 0 atau 2. Satu-satunya cara nomor kedua tidak menjadi 0 atau 2 adalah jika nomor setelah itu bukan merupakan 0 atau 2. Dan seterusnya.
Indeks nomor paling awal, selain dari angka 1 yang terkemuka, yang bukan 0 atau 2, tidak akan pernah bisa turun lebih dari 1 antara pasangan urutan yang berurutan. Fakta ini telah digunakan untuk menempatkan batas bawah yang sangat kuat ketika, jika pernah, suatu urutan mungkin tidak memiliki 1 sebagai elemen pertama.
Dalam tantangan ini, Anda akan diberi indeks urutan, dan Anda harus menampilkan indeks nomor pertama dalam urutan itu yang bukan yang pertama 1, dan bukan 0 atau 2.
Misalnya, dalam urutan perbedaan absolut ke-4 di atas:
[1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 2, 2, 4, 2, ...
Entri pertama yang bukan nol atau dua, selain entri pertama, adalah posisi 15, 14 nol diindeks. Jadi jika inputnya adalah 4, Anda akan menghasilkan 14.
Untuk input dari 1 hingga 30, output harus:
[3, 8, 14, 14, 25, 24, 23, 22, 25, 59, 98, 97, 98, 97, 174, 176, 176, 176, 176, 291, 290, 289, 740, 874, 873, 872, 873, 872, 871, 870]
Ini adalah OEIS A000232 .
Ini dengan asumsi Anda memiliki 1 input terindeks dan 0 output terindeks. Anda dapat mengindeks input dan output Anda mulai dari setiap bilangan bulat konstan, selama Anda dapat menerima kisaran input yang sesuai dengan semua urutan.
Persyaratan: Solusi Anda harus berjalan paling lama 1 menit pada input hingga 30. Jika itu cukup dekat sehingga tergantung pada spesifikasi komputer, itu diperbolehkan.
Kode terpendek menang.
sumber
Jawaban:
Jelly , 17 byte
Cobalah online!
Input adalah pengindeksan 2. Output adalah pengindeksan 1.
Pada TIO, semua testcas total mengambil 22,309 s.
sumber
Mathematica, 66 byte
Fungsi murni mengambil integer positif sebagai argumen dan mengembalikan integer 1-diindeks.
Nest[Abs@*Differences,Array[Prime,z+#],#]
menghitung#
daftar perbedaan mutlak yang diulang dari daftarz+#
bilangan prima pertama .For[z=1,Last@...<3,z++]
loop perhitungan ini hingga elemen terakhir dari daftar yang dihasilkan setidaknya3
, dan kemudianz
adalah output. (Perhatikan bahwa kebenaran dari algoritma mengasumsikan dugaan Gilbreath!)sumber
Pyth , 32 byte
Cobalah online!
Menggunakan pengindeksan 2.
sumber
MATL , 18 byte
Input dan output berbasis 1. Diperlukan kurang dari 40 detik dalam TIO untuk masing-masing kasus uji.
Cobalah online!
Penjelasan
Ini terus mencoba urutan awal bilangan prima yang lebih lama sampai perbedaan yang berurutan absolut yang diulang memberikan setidaknya satu nilai melebihi
2
.sumber
Perl 6 ,
136120 byteTidak Disatukan:
Dengan input 30, fungsi berjalan dalam waktu sekitar empat detik pada laptop sederhana saya.
... yang menjadi 1,4 detik setelah memutakhirkan instalasi Perl 6 saya yang berusia tujuh bulan (yang juga memberi saya
skip
metode yang memungkinkan saya mengurangi beberapa byte dari solusi pertama saya). Semua uji kasus dari 1 hingga 30 membutuhkan waktu sekitar sepuluh detik.sumber
Haskell , 94 byte
Cobalah online! Baris terakhir adalah fungsi anonim. Bind ke eg
g
dan panggil likeg 4
. Semua test case yang digabungkan membutuhkan waktu kurang dari 2 detik pada TIO.Bagaimana itu bekerja
[n|n<-[2..],all((>0).mod n)[2..n-1]]
menghasilkan daftar bilangan prima yang tak terbatas.f(a:b:r)=abs(a-b):f(b:r)
adalah fungsi yang menghasilkan perbedaan absolut dari elemen-elemen dari daftar tak terbatas. Diberi nomorn
,(iterate f[n|n<-[2..],all((>0).mod n)[2..n-1]]!!)
berlakuf
n
kali ke daftar bilangan prima.length.fst.span(<3)
menghitung panjang awalan dari daftar yang dihasilkan di mana elemen lebih kecil 3.sumber
Aksioma, 289 byte
ungolf itu dan uji
jika tidak menemukan solusinya memperluas daftar utama 2 * x dalam satu lingkaran dan menghitung ulang semua daftar yang tersisa. 3 detik untuk menemukan g (30)
sumber