Sepasang persamaan yang menyenangkan adalah 1 + 5 = 2 · 3 dan 1 · 5 = 2 + 3 . Ada banyak seperti ini, yang lain adalah 1 + 1 + 8 = 1 · 2 · 5 dan 1 · 1 · 8 = 1 + 2 + 5 . Secara umum produk n bilangan bulat positif sama dengan jumlah n bilangan bulat positif, dan sebaliknya.
Dalam tantangan ini, Anda harus menghasilkan semua kombinasi bilangan bulat positif untuk input n> 1 , tidak termasuk permutasi. Anda dapat menampilkan ini dalam format apa pun yang masuk akal. Sebagai contoh, semua solusi yang mungkin untuk n = 3 adalah:
(2, 2, 2) (1, 1, 6)
(1, 2, 3) (1, 2, 3)
(1, 3, 3) (1, 1, 7)
(1, 2, 5) (1, 1, 8)
Program yang dapat menghasilkan kombinasi terbanyak untuk n tertinggi dalam satu menit pada RAM 2GB saya , memenangkan laptop Intel Ubuntu 64-bit. Jika jawaban Anda menggunakan lebih dari 2GB RAM atau ditulis dalam bahasa yang saya tidak dapat menguji dengan perangkat lunak yang tersedia secara bebas, saya tidak akan menilai jawaban Anda. Saya akan menguji jawabannya dalam waktu dua minggu dari sekarang dan memilih pemenangnya. Nanti jawaban yang tidak bersaing masih bisa diposting tentunya.
Karena tidak diketahui apa set lengkap solusi untuk semua n itu, Anda diperbolehkan memposting jawaban yang menghasilkan solusi tidak lengkap. Namun jika jawaban lain menghasilkan solusi lengkap (lebih), bahkan jika n maksimumnya lebih kecil , jawaban itu menang.
Untuk memperjelas, inilah proses penilaian untuk menentukan pemenang:
Saya akan menguji program Anda dengan n = 2, n = 3, dll ... Saya menyimpan semua output Anda dan berhenti ketika program Anda membutuhkan lebih dari satu menit atau lebih dari 2GB RAM. Setiap kali program dijalankan untuk input yang diberikan n, itu akan dihentikan jika dibutuhkan lebih dari 1 menit.
Saya melihat semua hasil untuk semua program untuk n = 2. Jika suatu program menghasilkan solusi yang kurang valid daripada yang lain, program itu dihilangkan.
Ulangi langkah 2 untuk n = 3, n = 4, dll ... Program berdiri terakhir menang.
sumber
Jawaban:
C (gcc) , n = 50000000 dengan 6499 hasil dalam 59 detik
Untuk menghindari menghasilkan lebih dari satu terabyte output yang terdiri hampir seluruhnya dari 1s, urutan (katakanlah) 49999995 1s disingkat
1x49999995
.Cobalah online!
sumber
Mathematica, n = 293 dengan 12 solusi
OP mengubah tantangan dan meminta input.
Berikut ini adalah kode baru yang mengambil n sebagai input.
Untuk n = 293 Anda mendapatkan 12 solusi
memasukkan
Anda dapat menguji algoritme ini di Wolfram Sandbox yang merupakan perangkat lunak yang tersedia secara online dan gratis.
Ikuti saja tautannya, tempel kode (ctrl + v), tempel input di akhir kode dan tekan shift + enter untuk menjalankan.
Anda akan mendapatkan semua solusi saya dalam hitungan detik
Ini juga Coba online! dalam C ++ (gcc)
(Terima kasih banyak kepada @ThePirateBay untuk mendukung dan menerjemahkan kode saya ke bahasa gratis)
program ini hanya menghasilkan solusi dari bentuk {a, b, c} {a, b, c}
yang berarti a + b + c = a * b * c
Diperlukan 1 detik untuk menghitung
kedua belas solusi tersebut adalah:
sumber
Python 2 , n = 175, 28 menghasilkan 59s
Jadikan sedikit lebih lambat menggunakan faktor reduksi 2, tetapi dapatkan lebih banyak solusi dimulai dengan n = 83
Saya mendapatkan hasil untuk n hingga 92 pada TIO dalam sekali jalan.
Cobalah online!
sumber
Ruby , n = 12 mendapat 6 solusi
Setidaknya pada TIO, hasil yang biasa untuk 1 hingga 11
Cobalah online!
Dapatkan 10 hasil di bawah satu menit untuk n = 13 di laptop saya.
sumber
Mathematica, n = 19 dengan 11 solusi
ini jawaban baru saya sesuai dengan kriteria baru OP
jika Anda memberi input [n] di akhir, program menampilkan solusinya
berikut ini adalah hasil saya (pada laptop lama saya 64-bit 2.4GHz)
sumber
Haskell, banyak solusi cepat
f
menghitung solusinya,main
fungsi ini menambah input dari baris perintah dan beberapa format dan penghitungan.sumber
ghc -O3 -o prodsum prodsum.hs
dan jalankan dengan argumen baris perintah:./prodsum 6
Haskell , n = 10 dengan 2 solusi
Ini melakukan seperti omong kosong, tapi saya setidaknya memperbaikinya sehingga saya benar-benar mengatasi tantangan sekarang!
Cobalah online!
sumber
Aksioma, n = 83 dalam 59 detik di sini
hasil:
Cara untuk menjalankan teks di atas dalam Aksioma, akan, salin semua teks dalam file, simpan file dengan nama: Name.input, dalam jendela Aksioma gunakan ") baca absolutepath / Name".
hasil: (# f (i) menemukan panjang array f (i), yaitu jumlah solusi)
sumber