Paling umum beberapa dari himpunan bilangan bulat positif A
terkecil postive bilangan bulat B
seperti itu, untuk setiap k
di A
, terdapat bilangan bulat positif n
sehingga k*n = B
.
Diberikan setidaknya dua bilangan bulat positif sebagai input, menghasilkan kelipatan paling tidak umum mereka.
Aturan
- Builtin diperbolehkan, tetapi jika solusi Anda menggunakannya, Anda disarankan untuk memasukkan solusi alternatif yang tidak menggunakan builtin GCD / LCM. Namun, solusi alternatif tidak akan dihitung sama sekali dengan skor Anda, sehingga sepenuhnya opsional.
- Semua input dan output akan berada dalam kisaran yang secara representatif dapat mewakili bahasa Anda. Jika bahasa Anda secara bawaan mampu menghasilkan bilangan bulat besar secara sewenang-wenang, maka solusi Anda harus bekerja dengan input dan output yang besar dan sewenang-wenang.
Uji kasus
[7, 2] -> 14
[8, 1] -> 8
[6, 4, 8] -> 24
[8, 2, 1, 10] -> 40
[9, 6, 2, 1, 5] -> 90
[5, 5, 7, 1, 1] -> 35
[4, 13, 8, 8, 11, 1] -> 1144
[7, 2, 2, 11, 11, 8, 5] -> 3080
[1, 6, 10, 3, 4, 10, 7] -> 420
[5, 2, 9, 10, 3, 4, 4, 4, 7] -> 1260
[9, 7, 10, 9, 7, 8, 5, 10, 1] -> 2520
Jawaban:
Sebenarnya,
121 byteSaran golf masih diterima, meskipun saya tidak yakin bagaimana meningkatkan pada built-in LCM mentah. Cobalah online!
Versi 12 byte tanpa built-in. Saran golf diterima. Cobalah online!
Tidak melakukanolf
sumber
JavaScript (ES6), 36 byte
Mulai dari
1
itu angka pertama yang bisa dibagi oleh semua.Tampilkan cuplikan kode
sumber
some
mengembalikan true jika setidaknya satu elemen dalam array memenuhi syarat, kan?05AB1E / 2sable , 2 byte
Cobalah online! dalam 05AB1E
atau 2sable
sumber
Jelly , 3 byte
Dikurangi oleh LCM. Cobalah online! atau verifikasi semua kasus uji .
Versi alternatif, 6 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Python,
69655250 byte2 byte disimpan berkat Dennis!
Solusi rekursif yang cukup mudah, Anda harus membuat batas rekursi sedikit lebih tinggi untuk beberapa kasus uji untuk bekerja.
sumber
any
mengambil generator; Anda tidak membutuhkan tanda kurung.A=lambda l,i=1:all(i%a<1for a in l)or-~A(l,i+1)
menghemat beberapa byte lagi.MATL , 7 byte
Tidak ada builtin
Cobalah online!
Penjelasan
Mari kita ambil input
[8, 2, 1, 10]
sebagai contoh.EDIT (9 Juni 2017):
YF
dengan dua output telah dimodifikasi dalam rilis 20.1.0 : bilangan prima non-faktor dan eksponen (nol) dilewati. Ini tidak memengaruhi kode di atas, yang berfungsi tanpa memerlukan perubahan apa pun.sumber
Julia (3 Bytes) [Bekerja pada Non-Built-in]
Seperti yang ditunjukkan Dennis, saya selalu lupa bahwa Julia secara otomatis membuat vektor input.
Contoh:
sumber
PowerShell v2 +,
7360 byteMengambil input
$a
, loop ke atas dari$i=1
dengan$i++
, berdasarkan pada kondisi. Kondisi ini($a|?{!($i%$_)}).count
menjadi-n
ote
qual untuk$a.count
. Artinya, loop berakhir ketika elemen$a
yang merupakan pembagi$i
sama dengan elemen$a
. Kemudian, soliter$i
dibiarkan dalam pipa, dan output tersirat.Uji Kasus
sumber
Mathematica, 3 byte
Pemakaian:
sumber
Cheddar, 33 byte
Tidak ada yang super baru.
Tidak disatukan
Pada dasarnya ini dimulai pada satu dan terus meningkat sampai menemukan LCM
sumber
JavaScript (ES6),
6359 byteSecara rekursif menemukan LCM dari dua elemen terakhir.
sumber
a=>a.reduce((l,n)=>l*n/(g=(m,n)=>n?g(n,m%n):m)(l,n))
Dyalog APL, 2 byte
Dikurangi oleh LCM. Uji di TryAPL .
sumber
JavaScript (ES6), 52 byte
Saya
reduce
menjawab ini semampu saya, tetapi saya jelas tidak akan mendekati kesederhanaan jawaban @Hedi.sumber
Java 8,
755912189 byteMenggunakan Algoritma Euclidean dan fakta bahwa LCM (A, B) = A * B / GCD (A, B)
Kode:
Hapus jeda baris:
sumber
n->{...}
saya percaya itu menjadi Java 8 yang benar.int g(int a,int b){return b<1?a:g(b,a%b);}
. LCM kemudian bisa menjadiint l(int[]a){int l=1;for(int n:a)l=l*n/g(l,n);return l;}
, dengan total 99 byte.MATL , 3 byte
Ini menggunakan fungsi builtin dengan input array.
Cobalah online!
sumber
Brachylog , 17 byte
Cobalah online!
Penjelasan
sumber
Perl 6 , 10 byte
pada dasarnya sama dengan:
sumber
J, 11 byte
Ada solusi untuk 3 byte menggunakan LCM builtin.
Penjelasan
sumber
CJam,
181716 byte1 byte disimpan berkat Martin Ender.
Bertambah sampai LCM ditemukan.
Cobalah online
sumber
Racket 13 byte
lcm adalah fungsi bawaan di Racket:
Pengujian:
Keluaran:
sumber
R, 36 byte (bukan bawaan)
Mengambil input. Kemudian menguji setiap bilangan bulat positif dengan mengambil mod.
sumber
cat
terakhir Andai
ec=T
lebih baik untuk +4 daripada +5 untukcat()
.v=scan();while(any((F=F+1)%%v)){};F
dengancat()
atauec=T
membuatnya masing-masing 40 atau 39 byte. Dan +1, pendekatan yang sangat bagus.Pyth, 9 byte
Program yang mengambil input daftar pada STDIN dan mencetak hasilnya.
Cobalah secara online atau verifikasi semua kasus uji
Bagaimana itu bekerja
sumber
Haskell, 10 byte
Contoh penggunaan:
foldl1 lcm [5,2,9,10,3,4,4,4,7]
->1260
.sumber
C #, 50 + 18 = 68 byte
50 byte untuk definisi metode, +18 byte untuk impor LINQ.
Hampir sama dengan banyak jawaban lainnya. Menghitung secara rekursif sampai menemukan LCM. Saya agak terkejut ini tidak mendapatkan StackOverflowException, jadi saya juga memiliki versi non-rekursif yang sebenarnya hanya 1 byte lebih lama.
Tidak Disatukan:
sumber
Pip , 10 byte
Gunakan strategi "coba setiap angka sampai berhasil". Cobalah online!
sumber
PHP,
4274 bytelurus ke depan:
loop
$f
dari 1 ke atas; jika$f*$a
membelah$b
tanpa sisa, LCM ditemukan.Saya benar-benar telah membaca
at least
... ini kode untuk sejumlah parameter:Loop
$f
dari 1 ke atas sementara loop dalam belum berjalan ke $ argc.Loop
$i
dari2
ke$argc-1
sementara$f*$argv[1]
membagi$argv[$i]
tanpa sisa.kedua loop rusak: cetak
$f*$argument 1
.sumber
Prolog (SWI) , 46 byte
Cobalah online!
Solusi lain, 59 byte:
sumber
Python 3, 83 byte
sumber
Brachylog v2, 8 byte
Cobalah online!
Lucu bagaimana langsung memetakan definisi yang diberikan dalam tantangan.
Solusi yang mencurigakan lambat tetapi jauh lebih singkat:
Brachylog v2, 5 byte
Cobalah online!
Mengambil input melalui variabel output dan memberikan output melalui variabel input. Robekan menembus empat kasus uji pertama tetapi saya masih menunggu pada yang kelima ... Biasanya, saya masih akan menjadikannya solusi utama saya dan hanya percaya bahwa itu bekerja dengan benar, tetapi saya tidak tahu mengapa itu belum menegaskan bahwa 90 adalah LCM
9, 6, 2, 1, 5
ketika saya memberikan 90 dua puluh menit yang lalu.(Sunting: Ini mengonfirmasi jawaban setelah tidak lebih dari 16 jam, dan menghasilkannya di samping LCM
5, 5, 7, 1, 1
setelah sekitar dua hari.)Dan predikat lain yang sama sekali berbeda yang secara tidak sengaja menerjemahkan solusi Brachylog v1 Fatalize:
Brachylog v2, 10 byte
Cobalah online!
Ini diselamatkan dari solusi yang saya buat untuk tantangan ini sebelum saya menyadari output tidak terbatas menjadi bilangan bulat.
sumber
Pyth -
76 byteTidak ada builtin
Cobalah online di sini .
sumber
[4]
, atau apa pun dengan faktor prima berulang.