Ada banyak tantangan terkait faktorisasi prima / prima baru-baru ini, jadi saya pikir mungkin menarik untuk pergi ke arah lain.
Diberikan:
- bilangan bulat positif
n
, dan - daftar bilangan bulat positif yang tidak kosong
f
menulis program lengkap atau fungsi untuk menemukan integer terkecil i
sehingga i >= n
dan i
merupakan produk dari elemen integer nonnegatif f
.
Contoh:
Misalkan
n = 11, f = [2, 3, 5]
.Beberapa produk pertama adalah:
1 = 2^0 * 3^0 * 5^0 2 = 2^1 * 3^0 * 5^0 3 = 2^0 * 3^1 * 5^0 5 = 2^0 * 3^0 * 5^1 4 = 2^2 * 3^0 * 5^0 6 = 2^1 * 3^1 * 5^0 10 = 2^1 * 3^0 * 5^1 9 = 2^0 * 3^2 * 5^0 15 = 2^0 * 3^1 * 5^1 25 = 2^0 * 3^0 * 5^2 8 = 2^3 * 3^0 * 5^0 12 = 2^2 * 3^1 * 5^0 => smallest greater than (or equal to) 11, so we output it. 20 = 2^2 * 3^0 * 5^1 18 = 2^1 * 3^2 * 5^0 30 = 2^1 * 3^1 * 5^1 50 = 2^1 * 3^0 * 5^2 27 = 2^0 * 3^3 * 5^0 45 = 2^0 * 3^2 * 5^1 75 = 2^0 * 3^1 * 5^2 125 = 2^0 * 3^0 * 5^3
Misalkan
n=14, f=[9, 10, 7]
.Sekali lagi, beberapa produk pertama:
1 = 7^0 * 9^0 * 10^0 7 = 7^1 * 9^0 * 10^0 9 = 7^0 * 9^1 * 10^0 10 = 7^0 * 9^0 * 10^1 49 = 7^2 * 9^0 * 10^0 => smallest greater than (or equal to) 14, so we output it. 63 = 7^1 * 9^1 * 10^0 70 = 7^1 * 9^0 * 10^1 81 = 7^0 * 9^2 * 10^0 90 = 7^0 * 9^1 * 10^1 100 = 7^0 * 9^0 * 10^2
Kasus uji:
n, f -> output
10, [2, 3, 5] -> 10
17, [3, 7] -> 21
61, [3,5,2,7] -> 63
23, [2] -> 32
23, [3] -> 27
23, [2, 3] -> 24
31, [3] -> 81
93, [2,2,3] -> 96
91, [2,4,6] -> 96
1, [2,3,5,7,11,13,17,19] -> 1
151, [20,9,11] -> 180
11616, [23,32] -> 12167
11616, [23,32,2,3] -> 11664 = 2^4 * 3^6
5050, [3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210] -> 5103 = 3^6 * 7
12532159, [57, 34, 12, 21] -> 14183424 = 12^5 * 57
Aturan
- Anda dapat berasumsi bahwa
f
akan mengandung setidaknya satu elemen, dan bahwa semua elemenf
akan lebih besar dari 1. - Anda dapat secara opsional berasumsi bahwa
f
diurutkan dalam pesanan menurun / meningkat jika Anda mau (tapi tolong sebutkan) - Anda dapat mengambil sejumlah elemen
f
jika Anda mau. - Output sebagai string diizinkan.
- Ini adalah kode-golf , jadi jawaban terpendek dalam byte di setiap bahasa akan menang!
- Aturan I / O standar berlaku, dan celah standar dilarang.
- Penjelasan didorong.
sumber
∞
menghemat3
byte lebih dari-Log@0 (doesn't work on TIO, but works fine on desktop Mathematica). Also,
Tr [1 ^ {##}] `adalah byte yang lebih pendek dariLength@{##}
.#2
bahkan lebih pendek dariTr[1^{##}]
. :)Quiet
memasukkan kode utama Anda. Jawaban ini menghasilkan terlalu banyak pesan yang salah. Setidaknya tanyakan OP apakah dia∞
Masalah tampaknya bug. Saya akan mencoba memperbaikinya.Python 2 ,
918884 byteCobalah online!
Fungsi ini
f
memeriksa secara rekursif jikan
merupakan produk dari kekuatan elemenl
,g
hanya pembungkus untuk mengontrol iterasisumber
Python, 55 byte
Cobalah online!
Tanpa malu-malu menyalin skrip footer Rod untuk pengujian
sumber
Jelly , 13 byte
Tautan diad mengambil daftar,,
f
di sebelah kiri dan nomorn
,, di sebelah kanan yang menghasilkan angka.Cobalah online! Golfily inefisien - akan timeout untuk input dengan yang lebih tinggi
n
dan / atau lebih lamaf
.Bagaimana?
Kita tahu bahwa kekuatan faktor individu (sangat positif) tidak akan pernah perlu dilampaui
n-1
... jadi mari kita periksa semua cara yang mungkin!
sumber
Retina , 76 byte
Cobalah online! Tautan mengecualikan kasus uji paling lambat, tetapi masih agak lambat, jadi cobalah untuk tidak memalu server @ Dennis.
sumber
Pyth - 10 byte
Kehabisan memori sangat cepat.
Cobalah online di sini .
Jawaban yang masuk akal untuk 16 byte:
fsm.A}RQ*Md./PTE
sumber
Mathematica, 85 byte
Memasukkan
sumber
{d,s}Min@Select[Flatten[1##&@@(s^#)&/@0~Range~9~Tuples~Tr[1^s]],#>=d&]
U+F4A1
, nama panjang\[Function]
.0~Range~9
tampaknya sangat konservatif. Haruskahg[{2,3,5},1001]
benar-benar melewati1024
dan kembali1080
? Ini bukan input yang sangat besar.Japt , 10 byte
Uji secara online!
Tidak berfungsi pada kasus uji terakhir karena batas iterasi yang dirancang agar interpreter tidak berjalan selamanya (meskipun tidak banyak membantu di sini, karena membekukan browser saya selama satu jam ...)
Penjelasan
sumber
Jelly , 9 byte
Runtime dan penggunaan memori O (2 n • panjang (f) ) menjadikan ini solusi teoretis.
Cobalah online!
sumber
Haskell , 46 byte
Ini adalah port jawaban Python KSab yang sangat baik . Terima kasih kepada Laikoni untuk bantuan mereka dalam debugging dan golf jawaban ini di chatroom PPCG Haskell, Of Monads and Men . Selamat datang saran bermain golf! Cobalah online!
sumber
Mathematica, 73 byte
Pada dasarnya sebuah port jawaban Rod 's Python . Mendefinisikan dua operator biner dan . mengembalikan jika merupakan produk dari elemen dan
±
·
n±f
True
n
f
False
sebaliknya.n·f
memberikan bilangan bulat terkecili
. Jika seseorang dapat menemukan cara untuk menghilangkan tes keterbagian, saya bisa menghemat 10 byte dengan menggunakan pengkodean ISO 8859-1.Penjelasan
sumber
R , 52 byte
Cobalah online!
Sudah 3 minggu, jadi saya pikir saya akhirnya akan memposting solusi saya sendiri. Ini adalah pendekatan brute force.
Namun, ada builtin:
R , 5 byte
Cobalah online!
Dari dokumen:
Namun, beberapa pengujian mengungkapkan bug dalam implementasi, seperti yang ditunjukkan oleh tautan TIO di atas.
nextn(91,c(2,6))
harus mengembalikan 96, tetapi mengembalikan 128 sebagai gantinya. Ini jelas hanya terjadi ketikafactors
tidak semua relatif prima satu sama lain. Memang, kode C yang mendasarinya mengungkapkan bahwanextn
dengan rakus mencoba untuk membagi masing-masingfactor
pada gilirannya sampai1
tercapai:Ini dapat diatasi dengan mengambil input dalam urutan menurun.
sumber
JavaScript (ES6),
5350 byteDisimpan 3 byte berkat @DanielIndie
Mengambil input dalam sintaks currying
(n)(a)
.Uji kasus
Tampilkan cuplikan kode
Bagaimana?
sumber