Diberikan bilangan bulat n
, kembalikan jumlah cara yang dapat ditulis sebagai daftar bilangan prima. Misalnya, 2323
dapat ditulis sebagai (2,3,23)
, (23,23)
atau (2,3,2,3)
atau (23,2,3)
, sehingga Anda akan output 4
. Jika tidak dapat ditulis dengan cara ini, Anda harus menampilkan 0
.
Bilangan prima seperti 019
atau 00000037
adalah bilangan prima yang valid untuk masalah ini.
Kasus uji:
5 -> 1
55 -> 1
3593 -> 4 (359 and 3, or 3 and 593, or 3 and 59 and 3, or 3593)
3079 -> 2 (3 and 079, or 3079)
119 -> 0
5730000037 -> 7 (5,7,3,000003,7, 5,7,3,0000037, 5,73,000003,7, 5,73,0000037, 5,73000003,7, 5,7,30000037, 5730000037)
0-> undefined (you do not have to handle this case)
Ini adalah kode-golf , jadi jawaban terpendek dalam byte di setiap bahasa menang!
Sunting: sekarang saya tahu mengapa saya harus menggunakan kotak pasir lain kali
code-golf
math
primes
set-partitions
dicurangi
sumber
sumber
Jawaban:
Haskell ,
9689 byte5 byte disimpan berkat uji primality H.PWiz
Cobalah online!
Penjelasan
Hal pertama yang dilakukan adalah menciptakan fungsi uji prime
menggunakan teorema Wilsonmenggunakan definisi prime.Kemudian mulailah mendefinisikan
f
. Hal pertama yang saya pikirkan ketika saya melihat masalah ini adalah menggunakan pemrograman dinamis. Namun biaya pemrograman dinamis byte jadi ini menggunakan algoritma "pemrograman psuedo-dinamis". Sedangkan dalam pemrograman dinamis Anda akan menyimpan grafik Directed Acyclic dalam memori di sini kita hanya menggunakan rekursi dan menghitung ulang setiap node setiap kali kita membutuhkannya. Ini kehilangan semua manfaat waktu dari pemrograman dinamis, tetapi ini adalah kode-golf jadi siapa yang peduli. (masih lebih baik daripada pencarian brute force)Algoritma adalah sebagai berikut, kami membangun Grafik Acyclic Diarah, L , di mana setiap node mewakili substring dari angka. Secara khusus L i mewakili digit i terakhir dari input kami (sebut saja n ).
Kami mendefinisikan L 0 untuk memiliki nilai 1 dan masing-masing nilai lainnya di L memiliki jumlah masing-masing L j sehingga j <i dan substring n dari i ke j adalah prima.
Atau dalam formula:
Kami kemudian mengembalikan nilai pada indeks L terbesar terbesar . ( L k dimana k adalah jumlah digit n )
sumber
Jelly , 8 byte
Cobalah online!
Terima kasih -1 byte untuk Leaky Nun
-1 byte terima kasih untuk Dennis
Penjelasan
sumber
Brachylog , 10 byte
Cobalah online!
Pertama-tama,
ṫ
ubah input menjadi string.{…}ᶜ
Menghitung jumlah kemungkinan keluaran untuk…
.Di
{…}
dalam outputṫ
diumpankan ke~c
. Output dari predikat ini memuaskan bahwa, ketika digabungkan, itu sama dengan input. Ini dimasukkan ke dalamịᵐ
, yang menentukan bahwa outputnya adalah inputnya dengan setiap string dikonversi menjadi integer.ṗᵐ
menetapkan bahwa inputnya terdiri dari bilangan primasumber
{~cṗᵐ}ᶜ
. Ini sangat lambat karena~c
pada bilangan bulat bekerja dengan aritmatika kendala, tetapi secara teori itu bekerja.Pyth , 13 byte
Suite uji.
sumber
Python 2 ,
1059591 byteIni sangat lambat.
Cobalah online!
sumber
Python 2 , 161 byte
Cobalah online!
Fungsi ini
g
membuat partisi secara rekursif (dibutuhkan string sebagai input tetapi mengeluarkan daftar daftar int). Sebagian besar kode yang tersisa hanya untuk mengimplementasikan 'isd
a prime?'.sumber
Gaia , 12 byte
Cobalah online!
sumber
Bersih ,
199141131 byteCobalah online!
sumber
J ,
6564 byteCobalah online!
sumber
Pyth, 12 byte
Mengambil input sebagai integer, output
True
atauFalse
Cobalah online!
sumber