Ada persamaan, dengan asumsi n
dan x
positif,
yang mengekspresikan hubungan antara dua monomial, yang satu merupakan penyajian yang keliru dari yang lainnya. Banyak orang membuat kesalahan sederhana dengan menyamakan ini (yaitu 3x^2
dan (3x)^2
).
Tantangan
Diberikan bilangan bulat positif i
,, tentukan dan kembalikan solusi n
dan x
dengan jumlah terkecil sebagai array [n, x]
. Dalam kasus seri, set solusi apa pun dapat diterima.
Uji Kasus
62658722541234765
[15, 11]
202500
[4, 15]
524288
[8, 4]
33044255768277
[13, 9]
code-golf
number-theory
Zach Gates
sumber
sumber
[x, n]
bukan[n, x]
?n
danx
bilangan bulat, kan?[n, x]
dan tidak ada batasan waktu @Fatalizen
danx
adalah bilangan bulat @LuisMendoJawaban:
Brachylog , 35 byte
Cobalah online!
Penjelasan
Kami membuat daftar
[N, X]
, di manaN >= X
, kemudian setelah menetapkan nilai untuk itu, kami mencoba keduanya[N, X]
dan[X, N]
mungkin output. Sebagai contoh, jikaN
akan ditugaskan untuk3
, kita akan menguji melalui backtracking[3, 1]
,[1, 3]
,[3, 2]
,[2, 3]
,[3, 3]
dan[3, 3]
. Setelah itu langkah mundur berikutnya akan terjadi pada nilaiN
, yang akan pergi ke4
, dll.sumber
Mathematica, 61 byte
Berkat miles untuk menghemat 2 byte, ditambah sejumlah byte yang saya hitung tanpa alasan!
Menghitung tabel pasangan {n, x}, di mana x = (i / n) ^ (1 / n), menggunakan semua nilai n yang mungkin; hanya menyimpan yang x terkait adalah bilangan bulat; lalu kembalikan pasangan dengan nilai n terbesar.
Di sini, "semua nilai yang mungkin dari n" berkisar dari 1 hingga 2 * ln (i). Ini mengabaikan solusi {n, x} = {i, 1}, tetapi tidak apa-apa karena solusi {n, x} = {1, i} akan cukup jika itu adalah pilihan terbaik. Jadi x tidak perlu lebih kecil dari 2, yang berarti bahwa n * 2 ^ n ≤ i, dan semua n tersebut kurang dari 2 * ln (i).
Seseorang dapat menunjukkan menggunakan kalkulus bahwa pasangan {n, x} yang meminimalkan jumlah mereka dalam konteks ini sama dengan pasangan {n, x} dengan n terbesar (tidak termasuk {i, 1}). Itu sebabnya yang awal
Last
cukup baik untuk menemukan pasangan yang optimal.sumber
IntegerQ@*Last
untuk menyimpan 2 byte, tetapi saya juga menghitung 63 bukan 86 byte dalam versi saat ini.MATL , 22 byte
Outputnya
x
,n
dalam urutan itu.Input dibatasi oleh tipe
double
data standar MATL , yang dapat secara akurat mewakili bilangan bulat hingga2^53
hanya. Ini tidak termasuk tes pertama (masih, ini memberikan hasil yang benar, tetapi itu tidak dapat dijamin secara umum untuk input yang sangat besar).Cobalah online!
Penjelasan
Kode ini menggunakan dua loop bersarang:
do...while
Lingkaran luar melewati semua jumlah yang mungkinn+x
dalam urutan yang meningkat. Loop akan dihentikan segera setelah solusi ditemukan. Ini menjamin bahwa kami mengeluarkan solusi dengan jumlah minimum.for each
Loop dalam menguji semuan
danx
dengan jumlah itu. Ketika jumlah bertepatan dengan input, loop dalam keluar dan kondisi loop dari loop luar diatur kefalse
sehingga satu keluar juga.Kode yang dikomentari:
sumber
Jelly ,
2316 byteMengingat
i
, ini menghasilkan semua pasangan bilangan bulat dengan penggantian masuk[1, i]
. Kemudian melakukan penyaringan dan penyortiran yang sama seperti pada solusi sebelumnya yang ditunjukkan di bawah ini. Karena tidak ada batasan waktu, brute force akan bekerja diberikan waktu yang cukup.Cobalah online! , tetapi jangan mencoba nilai besar secara online.
Di pc saya, dibutuhkan sekitar 6 menit untuk menghitung hasilnya karena
i = 2048
menggunakan versi yang tidak efisien.Versi efisien
Ini adalah solusi sebelumnya untuk 23 byte yang mampu menyelesaikan nilai besar dengan cepat.
Diberikan
i
, menghitung pembagii
untuk menghasilkan pasangan di[n, x]
manan
pembagi danx = floor( (i/n)^(1/n) )
. Kemudian saring untuk nilai di manan * x^n == i
, urutkan pasangan yang tersisa berdasarkan jumlah mereka, dan kembalikan pasangan pertama.Cobalah online! atau Verifikasi semua kasus uji.
Penjelasan
sumber
PHP, 104 Bytes
Ini menghasilkan semua solusi yang mungkin tidak dalam format yang diusulkan 73 Bytes
sumber
Perl, 52 byte
Termasuk +2 untuk
-ap
Berikan masukan pada STDIN
mono.pl
:Butuh upaya untuk membuatnya bekerja
1
juga. Saya tidak tahu apakah kesalahan floating point dapat membuat ini mengembalikan jawaban yang salah untuk beberapa input.sumber