Algoritma Euclidean adalah salah satu algoritma tercepat untuk menghitung FPB (Faktor Persekutuan terBesar) / GCD (Greatest Common Divisor). FPB dari 2 angka adalah angka terbesar yang habis membagi 2 angka tersebut. Prinsip dari algoritma Euclidean ini adalah dari kenyataan bahwa FPB dari 2 angka tidak akan berubah jika angka terbesar dikurangi angka terkecil. Sebagai contoh, 22 adalah FPB dari 198 dan 110 (198 = 22 x 9; 110 = 22 x 5), 198 – 110 = 88 dan 110 tetap mempunyai FPB 22. Proses ini bisa terus di-ulang sampai salah satu dari angka tersebut adalah 0, sehingga angka yang lainnya adalah FPB dari 2 angka paling awal. Jika dilihat langkah – langkahnya sampai selesai :
(198, 110) -> (110, 88) -> (88, 22) -> (22, 0)
Dapat juga dituliskan secara prosedural :
198 = 110 x 1 + 88
110 = 88 x 1 + 22
88 = 22 x 4 + 0
Berdasarkan prosedur di atas, sekarang akan dibuat implementasinya di 4 bahasa pemrograman (C/C++, Assembly, Pascal, dan BASIC). Implementasinya akan berbentuk fungsi FPB dengan input 2 bilangan bulat (integer) 32-bit, dan output juga integer. Berikut ini adalah kode-kode fungsi FPB algoritma Euclidean di 4 bahasa tersebut :
(198, 110) -> (110, 88) -> (88, 22) -> (22, 0)
Dapat juga dituliskan secara prosedural :
198 = 110 x 1 + 88
110 = 88 x 1 + 22
88 = 22 x 4 + 0
Berdasarkan prosedur di atas, sekarang akan dibuat implementasinya di 4 bahasa pemrograman (C/C++, Assembly, Pascal, dan BASIC). Implementasinya akan berbentuk fungsi FPB dengan input 2 bilangan bulat (integer) 32-bit, dan output juga integer. Berikut ini adalah kode-kode fungsi FPB algoritma Euclidean di 4 bahasa tersebut :
C/C++
01 | int FPB( int a, int b) |
02 | { |
03 | if (a < b) |
04 | { int t = a; a = b; b = t;} // Tukar a dan b jika a < b |
05 |
06 | int r = 0; |
07 |
08 | do |
09 | { |
10 | r = a % b; |
11 | a = b; |
12 | b = r; |
13 | } while (r); // Teruskan loop hanya jika r tidak 0 |
14 |
15 | return a; |
16 | } |
Assembly
01 | FPB PROC |
02 | ; Fungsi : FPB(a,b) |
03 | ; Input : (a,b) -> (eax, ebx) |
04 | ; Output : FPB -> eax |
05 |
06 | pushad ; Simpan semua register |
07 | cmp eax , ebx ; Bandingkan eax dan ebx |
08 | ja startloop ; Jika a > b, langsung ke startloop |
09 | xchg eax , ebx ; Jika tidak, tukar isi eax dan ebx |
10 | startloop: |
11 | xor edx , edx ; edx = 0 |
12 | div ebx ; eax / edx, sisanya akan disimpan di edx |
13 | cmp edx , 0 ; Bandingkan edx dan 0 |
14 | je endloop ; Jika edx = 0, hentikan loop ke endloop |
15 | mov eax , ebx ; eax = ebx |
16 | mov ebx , edx ; ebx = edx |
17 | jmp startloop ; Mulai lagi loop |
18 | endloop: |
19 | popad ; Kembalikan semua register ke asal |
20 | mov eax , ebx ; Simpan nilai FPB di eax |
21 | ret ; Kembali ke pemanggil |
22 |
23 | FPB ENDP |
Pascal
01 | Function FPB(a, b : Integer ) : Integer ; |
02 |
03 | Var t, r : Integer ; |
04 |
05 | Begin |
06 | If (a < b) Then |
07 | Begin |
08 | t := a; a := b; b := t |
09 | End ; |
10 |
11 | Repeat |
12 | r := a Mod b; |
13 | a := b; |
14 | b := r |
15 | Until r = 0 ; |
16 |
17 | FPB := a; |
18 | End ; |
BASIC
01 | Function FPB( ByVal a As Long , ByVal b As Long ) As Long |
02 |
03 | Dim t As Long , r As Long |
04 |
05 | If a < b Then t = a: a = b: b = t |
06 |
07 | Do |
08 | r = a Mod b |
09 | a = b |
10 | b = r |
11 | Loop Until r = 0 |
12 |
13 | FPB = a |
14 |
15 | End Function |
No Response to "Tips Menghitung FPB dengan Algoritma Euclidean"
Post a Comment
Link dead , link invalid , suggestions or criticism ?
Please explain or tell to us by leaving a comment bellow.