Fungsi Landau ( OEIS A000793 ) memberikan urutan maksimum elemen grup simetris . Di sini, urutan permutasi adalah bilangan bulat positif terkecil sehingga adalah identitas - yang sama dengan kelipatan paling umum dari panjang siklus dalam dekomposisi siklus permutasi. Misalnya, yang dicapai misalnya dengan (1,2,3) (4,5,6,7) (8,9,10,11,12,12,13,14).
Oleh karena itu, juga sama dengan nilai maksimum di mana dengan bilangan bulat positif.
Masalah
Tulis fungsi atau program yang menghitung fungsi Landau.
Memasukkan
Bilangan bulat positif .
Keluaran
, urutan maksimum unsur dari kelompok simetris .
Contohnya
n g(n)
1 1
2 2
3 3
4 4
5 6
6 6
7 12
8 15
9 20
10 30
11 30
12 60
13 60
14 84
15 105
16 140
17 210
18 210
19 420
20 420
Skor
Ini adalah kode-golf : Program terpendek dalam byte menang. (Namun demikian, implementasi terpendek dalam berbagai bahasa dipersilahkan.)
Perhatikan bahwa tidak ada persyaratan yang dikenakan saat run-time; oleh karena itu, implementasi Anda tidak harus dapat menghasilkan semua hasil contoh di atas dalam waktu yang wajar.
Celah standar dilarang.
sumber
Max[Apply@LCM/@IntegerPartitions@#]&
tampaknya bekerja untuk saya dan akan memberikan 36 byte jika itu benar.Max[LCM@@@IntegerPartitions@#]&
selama 31 byte , karena@@@
tidakApply
pada level 1.Python , 87 byte
Cobalah online!
Fungsi rekursif yang melacak sisanya
n
ke partisi dan menjalankan LCMd
. Perhatikan bahwa ini berarti kita tidak perlu melacak angka aktual di partisi atau berapa banyak dari mereka yang telah kita gunakan. Kami mencoba setiap bagian berikutnya yang mungkinn-m
, menggantin
dengan yang tersisam
, dand
denganlcm(d,n-m)
. Kami mengambil hasil rekursif maksimumd
itu sendiri dan itu sendiri. Ketika tidak ada yang tersisan=0
, hasilnya akan adild
.Yang sulit adalah bahwa Python tidak memiliki built-in untuk LCM, GCD, atau faktorisasi utama. Untuk melakukannya
lcm(d,m-n)
, kami membuat daftar kelipatand
, dan mengambil nilai mencapai modulo minimumn-m
, yaitu dengankey=(n-m).__rmod__
. Karenamin
akan memberikan nilai sebelumnya dalam kasus dasi, ini selalu merupakan kelipatan nol pertamad
yang habis dibagin-m
, jadi LCM mereka. Kami hanya beberapad
hinggad*(n-m)
dijamin untuk mencapai LCM, tetapi lebih singkat untuk menulisd<<n
(yangd*2**n
) yang cukup dengan batas atas Python menjadi eksklusif.math
Pustaka Python 3 memilikigcd
(tetapi tidaklcm
) setelah 3.5, yang lebih pendek beberapa byte. Terima kasih kepada @ Joel untuk mempersingkat impor.Python 3.5+ , 84 byte
Cobalah online!
Menggunakan
numpy
'slcm
belum lebih pendek.Python dengan numpy , 77 byte
Cobalah online!
sumber
from math import*
adalah 85 byte dan menggunakanimport math
+math.gcd(...)
adalah 84 byte. Hal yang sama berlaku untuknumpy
.numpy
Panjang 5 adalah titik impas untukimport*
.import numpy
karenanumpy.max
akan menimpa built-in Pythonmax
(sama untukmin
) jikafrom numpy import*
digunakan. Ini tidak menyebabkan masalah di sini, tetapi kita semua tahu bahwaimport*
itu bukan praktik pemrograman yang baik secara umum.import*
tidak diragukan lagi praktik buruk, saya tidak berpikir itu benar-benar menimpa Pythonmin
danmax
, jadi kebingungannya adalah seseorang yang mengharapkan fungsi numpy dan mendapatkan yang basis.Haskell , 44 byte
Cobalah online!
sumber
Jelly , 7 byte
Cobalah online!
Tautan monadik yang menggunakan integer sebagai argumennya dan mengembalikan integer.
Penjelasan
sumber
JavaScript (ES6), 92 byte
Cobalah online!
JavaScript (ES6), 95 byte
Cobalah online!
Bagaimana?
Kami mendefinisikan:
(ini A008475 )
Lalu kami menggunakan rumus (dari A000793 ):
sumber
Perl 6 , 50 byte
Cobalah online!
Memeriksa semua permutasi secara langsung, seperti solusi Ruby @ histocrat.
Penjelasan
1 Kita dapat menggunakan urutan n item yang berbeda untuk pemeriksaan, jadi kita cukup mengambil permutasi itu sendiri.
2 Jika titik akhir adalah sebuah wadah,
...
operator urutan smartmatches terhadap item pertama. Jadi kita harus melewati daftar elemen tunggal.sumber
Ruby , 77 byte
Cobalah online!
(1..)
sintaks rentang tak terbatas terlalu baru untuk TIO, sehingga tautan menetapkan batas atas yang sewenang-wenang.Ini menggunakan definisi langsung - menghitung semua permutasi yang mungkin, kemudian menguji masing-masing dengan bermutasi
a
sampai kembali ke posisi semula (yang juga berarti saya bisa bermutasi array asli di setiap loop).sumber
Gaia ,
252322 byteCobalah online!
Tidak memiliki LCM atau partisi integer membuat pendekatan ini agak panjang.
sumber
Haskell,
7067 byteCobalah online!
Edit: -3 byte terima kasih kepada @xnor.
sumber
mapM(:[1..n])
, karena elemen tambahan tidak berbahaya.Python 3 + numpy,
11510299 byte-13 byte berkat @Daniel Shepler
-3 byte lagi dari @Daniel Shepler
Cobalah online!
Metode brute force: temukan semua kemungkinan urutan a, b, c, ... di mana a + b + c + ... = n, lalu pilih satu dengan lcm tertinggi.
sumber
c
untuk mengembalikan satu set dan memo, itu tidak buruk sama sekali (meskipun diakui itu sedikit ungolfPyth ,
2415 byteCobalah online!
-9 byte: perhatikan dan perhatikan bahwa Pyth sebenarnya memiliki GCD builtin (
i
).sumber