Faktoradik
Faktoradik adalah sebuah sistem bilangan yang setiap posisi angka memiliki basis sesuai dengan faktorial dari posisinya. Sistem bilangan ini memungkinkan untuk membangkitkan permutasi dalam urutan leksikografik.
Faktoradik memiliki bentuk deretan bilangan an...a4a3a2a1a0, dengan setiap bilangan ai bersifat:
dan
Nilai faktoradik
Nilai sebuah faktoradik an...a4a3a2a1a0 dapat dengan mudah didapat menggunakan formula:
Sebagai contoh, bilangan 2,1,1,1,0
Posisi setiap bilangan, sama seperti pada sistem bilangan posisional lainnya, dinomori mulai dari 0 dari sebelah kanan.
Bilangan ke | 5 | 4 | 3 | 2 | 1 | 0 |
Bilangan | 0 | 2 | 1 | 1 | 1 | 0 |
Faktorial | 120 | 24 | 6 | 2 | 1 | 1 |
Sehingga nilainya adalah sebesar: 2×4! + 1×3! + 1×2! + 1×1! + 0×0! = 57
Di bawah ini adalah daftar 24 faktoradik pertama beserta nilainya:
Faktoradik | Nilai | Faktoradik | Nilai | Faktoradik | Nilai | Faktoradik | Nilai |
---|---|---|---|---|---|---|---|
0, 0, 0, 0 | 0 | 1, 0, 0, 0 | 6 | 2, 0, 0, 0 | 12 | 3, 0, 0, 0 | 18 |
0, 0, 1, 0 | 1 | 1, 0, 1, 0 | 7 | 2, 0, 1, 0 | 13 | 3, 0, 1, 0 | 19 |
0, 1, 0, 0 | 2 | 1, 1, 0, 0 | 8 | 2, 1, 0, 0 | 14 | 3, 1, 0, 0 | 20 |
0, 1, 1, 0 | 3 | 1, 1, 1, 0 | 9 | 2, 1, 1, 0 | 15 | 3, 1, 1, 0 | 21 |
0, 2, 0, 0 | 4 | 1, 2, 0, 0 | 10 | 2, 2, 0, 0 | 16 | 3, 2, 0, 0 | 22 |
0, 2, 1, 0 | 5 | 1, 2, 1, 0 | 11 | 2, 2, 1, 0 | 17 | 3, 2, 1, 0 | 23 |
Mendapatkan Faktoradik dari Sembarang Bilangan
Suatu faktoradik bisa diperoleh dari sembarang bilangan dengan algoritma sebagai berikut:
- Cari terbesar di mana
- Bagi dengan , akan didapatkan hasil bagi dan sisa bagi .
- adalah digit faktoradik ke- , yaitu
- Ulangi dari langkah kedua, dengan (sisa bagi) menggantikan , dan menggantikan .
- Algoritma selesai jika i sudah mencapai 0.
Ketika berakhir, algoritma ini akan menghasilkan deretan faktoradik an...a4a3a2a1a0.
Bilangan Inversi
Membentuk Permutasi dari Faktoradik
Kode program untuk membangkitkan faktoradik
Pascal
FMax = CariFaktorialTerbesar(Bilangan); Sisa := Bilangan; for i := FMax downto 0 do begin f := Faktorial(i); A[i] := Sisa div f; Sisa := Sisa mod f; end;