My first Magazine pemrograman-kompetitif-dasar | Page 21
2
Matematika Diskret Dasar
Matematika diskret merupakan cabang matematika yang mempelajari tentang sifat bilangan
bulat, logika, kombinatorika, dan graf. Ilmu pada jenis matematika ini digunakan sebagai dasar
ilmu komputer secara umum. Pada bagian ini, kita akan mencakup dasar ilmu matematika diskret
yang umum digunakan dalam pemrograman kompetitif.
2.1
Arimetika Modular
Modulo merupakan suatu operator matematika untuk mendapatkan sisa bagi suatu bilangan
terhadap suatu bilangan lainnya. Operasi modulo bisa dilambangkan dengan mod pada bahasa
Pascal atau % pada bahasa C/C++ atau Java. Operasi a mod m biasa dibaca "a modulo m", dan
memberikan sisa hasil bagi a oleh m. Sebagai contoh:
• 5 mod 3 = 2
• 10 mod 2 = 0
• 21 mod 6 = 3
Sifat-sifat dasar dari operasi modulo adalah:
•
•
•
•
•
(a + b) mod m = ((a mod m) + (b mod m)) mod m
(a − b) mod m = ((a mod m) − (b mod m)) mod m
(a × b) mod m = ((a mod m) × (b mod m)) mod m
a b mod m = (a mod m) b mod m
(−a) mod m = (−(a mod m) + m) mod m
Sifat-sifat tersebut dapat dimanfaatkan untuk mempermudah perhitungan modulo. Sebagai
contoh, Anda diberikan bilangan n dan k, lalu diminta menghitung hasil n! mod k. Pada contoh
ini, n! = n × (n − 1) × (n − 2) × ... × 1. Seandainya kita menghitung n! terlebih dahulu, kemudian
baru dimodulo k, kemungkinan besar kita akan mendapatkan integer overflow. Ingat bahwa n!
dapat bernilai sangat besar dan tidak dapat direpresentasikan dengan tipe data primitif integer.
Solusinya adalah melakukan modulo pada setiap fase perkalian. Contoh implementasi dapat
dilihat pada Algoritma 2. Perhatikan pada baris ke-4, hasil perkalian selalu dimodulo untuk
mencegah integer overflow.
Algoritma 2 Fungsi faktorial dengan memanfaatkan modulo.
1:
2:
3:
4:
5:
6:
7:
function MODULAR F ACTORIAL (n, k)
result ← 1
for i ← 1, n do
result ← (result × i) mod k
end for
return result
end function
11