pengantar
Tujuan Anda adalah untuk menemukan jumlah paling sedikit yang Anda perlu tambahkan atau gandakan bersama untuk mendapatkan nilai input, ini adalah A005245 .
Memasukkan
Salah satu bilangan bulat positif N .
Keluaran
Jumlah terkecil yang yang harus ditambahkan / dikalikan untuk mendapatkan N .
Input Sampel
7
Output Sampel
6
Penjelasan
(
1
+1
+1
) * (1
+1
) +1
= 7Karena ini memerlukan
6
yang, outputnya6
Uji kasus
1 1
2 2
3 3
5 5
10 7
20 9
50 12
Karena ini adalah tantangan kode-golf , jumlah byte terendah menang.
code-golf
sequence
arithmetic
integer
expression-building
Spyrali Chyuu
sumber
sumber
f(x) != x.primeFactorisation().sum()
kecuali 1?Jawaban:
Python 2 ,
7470 byteCobalah online!
Versi alternatif, 59 byte (tidak diverifikasi)
Ini bekerja setidaknya hingga n = 1.000.000 , tetapi saya belum membuktikan bahwa itu bekerja untuk semua n positif .
Cobalah online!
sumber
n=a*j+b
denganb<j
, tetapi mungkin kita perlub>=j
?b>=j
danb>=a
. Tapi Anda benar, tidak jelas bahwa ini tidak akan terjadi.a*b+c*d
dengana,b,c,d
semua ekspresi penjumlahan dan sangat efisien.Jelly ,
1614 byteTerima kasih Dennis untuk menghemat 2 byte!
Cobalah online!
Penjelasan logis
Diberi nomor n :
1
, jawabannya adalah1
. Jika tidak:Representasi adalah salah satu
a + b
ataua × b
, di manaa
danb
merupakan ekspresi.Pertimbangkan semua nilai yang mungkin
a
danb
:a + b
, makaa
danb
dalam jangkauan[1 .. n-1]
.a × b
,a
danb
pembagi yang tepatn
lebih besar dari1
.Dalam kedua kasus, daftar
[[<proper divisors of n larger than 1>], [1, 2, ..., n-1]]
dihitung (ÆḌḊ,Ṗ
), petakan tautan saat ini di atas setiap angka߀€
, tambahkan pasangan yang benar bersama-sama (+U$
) dan dapatkan nilai minimum (FṂo
).Penjelasan kode
sumber
JavaScript (ES6),
10896 byteSangat tidak efisien;
Array(n>>1)
mempercepatnya sedikit dengan biaya satu byte. Penjelasan:n%++i
bukan nol jikai
bukan merupakan faktor, begitun%++i/0
jugaInfinity
(dan karena itu benar, dan juga pasti tidak minimal) jikai
bukan merupakan faktor, tetapiNaN
(dan karena itu palsu) jikai
merupakan faktor. Sunting: Disimpan 12 byte dengan inspirasi dari @ edc65.sumber
f(50)
tetapi sayangnya Pembaruan Windows me-reboot PC saya sebelum bisa selesai.a
array. Tidak bisakah Anda menggabungkan evaluasi dalam 2 lambda dan mengambil min?(i+=2)
dengan yang lain++i
jadi saya menyimpan total 12 byte, terima kasih!Pari / GP , 66 byte
Port jawaban Dennis Python :
Cobalah online!
Pari / GP , 72 byte
Lebih lama, tetapi lebih efisien:
Cobalah online!
sumber
f(n)=vecmin(concat(n,[f(j)+f(n\j)+f(n%j)|j<-[2..n-1]]))
.Pari / GP , 213 byte
Sunting: Saya sudah dipukuli habis-habisan .
Cobalah online!
sumber
Python 2 , 181 byte
Cobalah online!
sumber
f
tidak boleh anonim, karena memanggil dirinya sendiri secara rekursif.Bahasa Wolfram (Mathematica) , 59 byte
Disimpan 3 byte berkat Martin Ender. Menggunakan pengkodean CP-1252, di mana
±
satu byte.Cobalah online!
sumber
±
alih-alihf
menghemat 3 byte dengan asumsi sumber dikodekan dalam CP 1252: tio.run/##y00syUjNTSzJTE78///QRkNbQ@tDG/PirWx9M/…Perl 5 , -p 78 byte
79 byte dalam penghitungan gaya lama (
+1
untuk-p
)Fakta bahwa perl harus menggunakan ekstra
$
untuk semua akses skalar benar-benar menyakiti panjang golf yang melakukan banyak aritmatika ...Metode ini sebagian besar seperti yang lain yang sudah diposting (coba multiplikasi dan penambahan untuk membangun nomor target, ambil yang termurah). Namun tidak berulang berulang sehingga dapat digunakan untuk input yang relatif besar.
Itu juga tidak mencoba untuk meminimalkan biaya membangun nomor dengan penambahan atau multiplikasi karena perl 5 tidak memiliki builtin
min
dan numeric sort adalah looooooong (seperti yang terlihat dari sortir yang masih dalam kode). Sebaliknya saya hanya berasumsi jika angka merupakan faktor target yang akan saya gunakan multiplikasi. Itu aman karena jika mis3
adalah faktor12
(sehingga menjumlahkan biaya3
dan12/3
) kemudian dalam loop itu akan mempertimbangkan9=12-3
yang tidak akan menjadi faktor, sehingga9+3
dengan biaya yang sama seperti3+9
akan dicoba. Namun itu mungkin gagal untuk target<= 4
(hanya untuk1
dan2
). Menambahkan$_
ke daftar untuk meminimalkan perbaikan itu. Yang disayangkan karena saya tidak benar-benar membutuhkannya untuk kasus dasar karena saya sudah menginisialisasi@;
dengan nilai awal yang tepat sehingga harganya 3 byte.Cobalah online!
sumber