Saya ditanya pertanyaan ini dalam sebuah wawancara tetapi saya tidak dapat menemukan solusi. Saya tidak tahu apakah pertanyaannya benar atau tidak. Saya mencoba banyak tetapi tidak dapat mencapai solusi apa pun. Jujur saja, tidak ada yang terlintas di pikiran saya.
Nomor Rocco
Bilangan bulat positif adalah bilangan Rocco jika bilangan tersebut dapat direpresentasikan sebagai atau , di mana adalah bilangan prima.
10 angka Rocco pertama adalah:
Tugas
Kode Anda harus menerima bilangan bulat positif sebagai input dan menentukan apakah itu nomor Rocco atau tidak.
Brownie poin
- Tulis fungsi yang menghitung dan mencetak jumlah angka Rocco kurang dari atau sama dengan 1 juta.
- Tulis fungsi yang menghitung dan mencetak hitungan angka Rocco dari pertanyaan bonus (di atas yang) prima.
code-golf
decision-problem
number-theory
kode vijays
sumber
sumber
print 0
. Semua angka Rocco adalah gabungan(n*..)
, jadi tidak ada bilangan prima dalam kisaran apa pun.Jawaban:
05AB1E , 8 byte
Mengembalikan jika adalah nomor Rocco, atau sebaliknya.1 n 0
Cobalah online!
Bagaimana?
Diberikan bilangan bulat positif , kami menguji apakah ada faktor prima dari sehingga:n hal n
Berkomentar
sumber
JavaScript (ES7), 55 byte
Cobalah online!
Bagaimana?
Dengan bilangan bulat positif , kami mencari bilangan prima sehingga atau .n x x ( x + 14 ) = n x ( x - 14 ) = n
Oleh karena itu persamaan kuadrat berikut:
Akar positif dari adalah:( 1 )
dan akar positif dari adalah:( 2 )
Oleh karena itu, masalahnya setara dengan menguji apakah atau adalah prima.x0 x1
Untuk melakukan itu, kami menggunakan fungsi tes primality rekursif klasik, dengan tes tambahan untuk memastikan bahwa itu tidak berulang selamanya jika diberi nomor irasional sebagai input.
Fungsi pembungkus utama:
sumber
Perl 6 ,
4528 byteCobalah online!
Menggunakan konstruksi Arnauld , bahwa harus menjadi prima agar menjadi nomor Rocco.n + 49-----ñ 7 n
Penjelasan:
sumber
Regex (ECMAScript),
6462 byteRegex ini menemukan dua angka dan sehingga . Jika menemukan mereka, itu kemudian menegaskan bahwa atau adalah prima. Itu dia!Sebuah a + 14 n = a ( a + 14 ) Sebuah a + 14
Ini menggunakan varian dari algoritma multiplikasi yang dijelaskan secara singkat dalam paragraf posting regex angka saya yang berlimpah . Ini adalah spoiler . Jadi jangan membaca lebih jauh jika Anda tidak ingin beberapa sihir regex unary canggih dimanjakan untuk Anda . Jika Anda ingin mencoba mencari tahu sendiri keajaiban ini, saya sangat menyarankan memulai dengan memecahkan beberapa masalah dalam daftar masalah yang direkomendasikan secara spoiler-tag pada posting sebelumnya , dan mencoba untuk menemukan wawasan matematika secara mandiri.
Algoritma multiplikasi diterapkan secara berbeda di sini karena kami menyatakan bahwa dua nilai yang dikenal dikalikan bersama dengan nilai yang diketahui lainnya (seperti yang juga dilakukan dalam versi alternatif dari regex dalam posting ini , untuk menguji angka menjadi kuadrat sempurna). Dalam sebagian besar jawaban saya yang diposting regex sejauh ini, perkalian diimplementasikan sebagai perhitungan (bukan pernyataan, secara konseptual) di mana tujuannya adalah untuk menemukan produk dari dua angka yang dikenal. Kedua metode bekerja di kedua keadaan, tetapi golf-bijaksana, lebih buruk dalam melakukan pekerjaan masing-masing.
Cobalah online!
sumber
Brachylog ,
1312 byteMasukkan nomor kandidat sebagai argumen baris perintah. Output
true
ataufalse
. Cobalah online!Penjelasan
Kode adalah predikat yang inputnya tidak dibatasi dan yang outputnya adalah nomor yang kami uji.
(Tips dipersilakan. Itu
{+|-}
masih terasa kikuk.)sumber
Brachylog , 9 byte
Pendekatan yang berbeda dari jawaban DLosc
Mengambil N sebagai output, memberikan [P, P-14] atau [P + 14, P] kembali melalui input (angka terbesar pertama)
penjelasan
Cobalah online!
sumber
Pyth,
2220 byteCobalah online di sini .
Sunting: Disimpan 3 byte sebagai input akan selalu positif, jadi tidak perlu menyaring nilai-nilai negatif dari daftar. Juga memperbaiki bug untuk input
1
dan2
, biaya 1 byte. Versi sebelumnya:}Qsm*Ld>#0+Ld_B14fP_TU
sumber
05AB1E ,
161514 byteDisimpan 1 byte oleh komputasi 14 dengan
7·
bukannyažvÍ
(tidak percaya saya tidak memikirkan ini di tempat pertama).Disimpan 1 byte berkat Emigna
Cobalah online! atau Uji semua input
Penjelasan
sumber
}˜så
untukQ}Z
menggunakan input implisit. Test-Suite Anda harus diubah sedikit menjadi seperti ini agar bisa berfungsi. Juga, cara yang lebih jelas untuk menulisžvÍ
atau7·
menjadi14
;)J ,
2115 byteBerdasarkan solusi Arnauld :
Cobalah online!
Atempt sebelumnya:
Cobalah online!
sumber
14 e.q:|@-]%q:
untuk 14 byteRetina 0.8.2 , 61 byte
Cobalah online! Penjelasan:
Konversikan ke unary.
\1
menangkap lebih besar dari dua faktor.\2
menangkap konstanta 14, menghemat satu byte.\3
menangkap lebih kecil dari dua faktor, minus 1. Ini juga memastikan bahwa kedua faktor minimal 2.Periksa kedua faktor untuk memastikan setidaknya satu di antaranya prima. Gagasan menggunakan
\2?
dicuri tanpa malu-malu dari jawaban @ Deadcode.Ulangi yang lebih besar dari dua faktor beberapa kali sama dengan satu lebih kecil dari dua faktor yang lebih kecil. Seperti yang telah kita tangkap faktor yang lebih besar setelah ini maka akhirnya menangkap produk dari dua faktor.
Pastikan produk sama dengan angka yang diberikan.
Terjemahan langsung ke Retina 1 dengan mengganti
$*
dengan*1
akan memiliki jumlah byte yang sama tetapi byte dapat disimpan dengan mengganti semua1
s dengan_
s dan kemudian*1
dapat diganti dengan*
alih - alih*_
. Jawaban Retina 1 sebelumnya untuk 68 byte:Cobalah online! Penjelasan:
Konversikan ke unary.
Temukan semua pasangan faktor.
Pastikan satu adalah prima.
Ambil perbedaan absolut.
Periksa apakah ada 14.
sumber
JavaScript (Babel Node) , 69 byte
Sial, saya pikir saya akan mengalahkan Jawaban Arnaulds tetapi tidak .....: c
Cobalah online!
Saya ingin menyingkirkan
x=>[...Array(x)].some(
bagian menggunakan rekursi sehingga mungkin menjadi lebih pendek dari waktu ke waktuPenjelasan
Ini menggunakan rumus
sumber
Japt , 10 byte
Sama seperti Jawaban Javascript saya
Cobalah online!
sumber
Jelly , 9 byte
Cobalah online!
sumber
APL (NARS) 16 karakter, 32 byte
{π⍵} akan menemukan faktorisasi argumennya dan kami menduga bahwa elemen terakhir dari hasilnya (daftar pembagi n) adalah pembagi utama maksimum n; Di sini kita mengira bahwa satu definisi yang setara dari angka Rocco adalah: n adalah angka Rocco <=> prima faktor maks dari n: r sedemikian rupa sehingga benar 14 = ∣rn ÷ r [untuk k pseudocode sebagai 14 == abs (rn / r) definisi nomor Rocco ini tampaknya ok pada akhirnya di kisaran 1..1000000]; kisaran nilai ok akan menjadi 1..maxInt; uji:
sumber
C # (Visual C # Interactive Compiler) , 99 byte
Cobalah online!
Enumerable.Range
menyerang lagi :) Menggunakan flag compiler gila, Anda dapat mengurangi banyak hal, meskipun saya agak penggemar solusi vanilla.C # (Visual C # Interactive Compiler) + /u:System.Linq.Enumerable, 77 byte
Cobalah online!
Di bawah ini adalah port solusi Arnauld yang tampak cukup keren. Saat ini terpanjang, tetapi mungkin bisa golf beberapa.
C # (Visual C # Interactive Compiler) , 101 byte
Cobalah online!
sumber
APL (NARS) 30 karakter, 60 byte
Di sini 0π adalah fungsi mengatakan jika satu angka adalah bilangan prima, uji:
sumber
F #, 2 jawaban (tidak bersaing)
Saya sangat menyukai jawaban @Arnauld, jadi saya menerjemahkannya.
123 byte , berdasarkan pada jawaban JavaScript
Penjelasan:
125 byte , berdasarkan jawaban 05AB1E
Penjelasan:
sumber
Python 2 , 58 byte
Output dengan kode keluar, gagal (
1
) untuk nomor Rocco.Cobalah online!
sumber