Algoritma Pembagian Di Gaussian Integer
Algoritma Pembagian Di Gaussian Integer
di Gaussian Integer
(versi Praktikum Komputasi Aljabar)
Katakunci: Ring Komutatif, Daerah Euclid, Gaussian Integer, Algoritma Pembagian, Matlab
A. Latar Belakang
Sebelumnya mohon maaf apabila kata-kata dan kalimat-kalimat yang saya pergunakan di artikel ini
sepenuhnya tidak mengikuti kaidah Bahasa Indonesia yang baik dan benar sesuai EYD (Ejaan Yang
Disempurnakan). Toh, ini juga bukan sebuah karya ilmiah kan?
Ceritanya berawal dari saat aku mengikuti kuliah Peng. Struktur Aljabar II pada hari Rabu, 10
Desember 2008 yang diajar oleh Bu Indah Emilia Wijayanti. Suatu saat, ketika mengajar di kelas Bu
Indah bertanya kepadaku,
[]
“Wijna, apa ada program yang bisa digunakan untuk menghitung gcd di ] i ? ”
Terus terang waktu itu aku sedang tidak memperhatikan penjelasan Bu Indah, jadi aku jawab
simpel saja,
“Belum tahu ya Bu !”
Sepertinya Bu Indah kurang puas dengan jawabanku. Aku juga jadi kepikiran, apaan sih itu gcd di
] [i ] . Kalau gcd sih aku ngerti, tapi kalau ] [i ] wah itu aku kurang begitu paham. Aku juga merasa
bersalah, ikut kuliah Peng. Struktur Aljabar II tapi di kelas malah maen-maen dan nggak
memperhatikan. Karena kata orang aku (masih) sedikit baik hati, aku membuka-buka lagi buku Aljabar
[]
(punya Andreas sih :p) buat mencari informasi tentang ] i . Ternyata setelah dipahami, cara mencari
[]
gcd di ] i nggak susah-susah amat. Tapi, ada modal awal yang harus dimiliki untuk menghitung gcd
[]
di ] i , yaitu Algoritma Pembagian. Dari contoh yang diberikan Bu Indah di papan tulis yang
dikerjakan anak-anak Math ’07, aku mendapat inspirasi untuk membuat program Algoritma Pembagian
[]
di ] i . Yah...muncul lagi deh sifat kurang-kerjaanku, jadi dari pulang kuliah sampai di rumah aku
terus mikir bagaimana caranya membuat itu program. Hmmm...
1
Ya, demi harga diri seorang Wijna yang pernah dibimbing tugas-akhirnya oleh Bu Indah, masak sih
ngerjain yang kayak gini aja nggak bisa? Tapi maaf ya Bu, kalau saya bisanya hanya segini. Kalau dapet
inspirasi lagi, nanti saya utak-atik lagi deh. Hehehe.
B. Dasar Teori
Berikut diberikan beberapa definisi dan sifat mengenai Gaussian Integer.
Contoh:
Pada ] 6 , elemen 2,3∈ ] 6 merupakan pembagi nol sejati karena 2 ≠ 0 , 3 ≠ 0 , dan 2.3 = 0 .
Contoh:
a.) Ring ] 6 bukan daerah integral karena memuat pembagi nol sejati yaitu 2,3∈ ] 6 .
b.) Ring ] 2 merupakan daerah integral karena tidak memuat pembagi nol sejati.
Contoh:
[] []
Elemen 2 + i, i, 5 ∈ ] i akan tetapi 1 + (1 2 ) i ∉ ] i karena 1 2 ∉ ] .
a.) Gaussian Integer merupakan himpunan bagian dari himpunan bilangan kompleks, yaitu
] [i ] ⊂ ^ .
b.) Gaussian Integer merupakan grup terhadap operasi penjumlahan bilangan kompleks.
c.) Gaussian Integer merupakan ring terhadap operasi penjumlahan bilangan kompleks dan
perkalian bilang kompleks.
d.) Gaussian Integer merupakan ring dengan elemen satuan, karena 1 ∈ ] i . []
e.) Gaussian Integer merupakan ring komutatif.
f.) Gussian Integer tidak memuat pembagi nol sejati.
g.) Dari poin c.) , d.) , e.) dan f.) dapat disimpulkan bahwa Gaussian Integer merupakan
daerah integral.
2
Lebih lanjut:
1, −1, i dan −i .
h.) Unit pada Gaussian Integer hanyalah
i.) Gaussian Integer bukan lapangan, karena 2 ∈ ] [i ] tidak memiliki invers terhadap
perkalian di ] i .[]
[] []
j.) Untuk setiap a ∈ ] i dan a ≠ 0 , selalu terdapat b ∈ _ i sehingga ab = 1 .
Pada kuliah Peng. Struktur Aljabar II ditunjukkan bahwa Gaussian Integer merupakan Daerah Euclid.
( [] )
Yaitu terdapat fungsi v : ] i − {0} → ` 0 = {0,1, 2,3,...} yang memenuhi dua sifat berikut:
Sifat (ii) disebut juga bahwa Algoritma Pembagian berlaku di Gaussian Integer.
Fungsi v disebut fungsi evaluasi , dan fungsi evaluasi pada Gaussian Integer dinyatakan sebagai
v ( a + bi ) = a 2 + b 2 , untuk setiap a + bi ∈ ] [i ] .
Menurut sifat Gaussian Integer di poin j.), untuk sebarang y ∈ ] i [] dan y ≠ 0 selalu dapat
ditemukan y
−1
∈ _ [i ] sehingga berlaku yy = 1 . Misalkan x = a1 + a2i dan y = b1 + b2i , untuk
−1
1
y −1 =
y
1
=
b1 + b2i
1 ⎛b −b i ⎞
= ⋅⎜ 1 2 ⎟
b1 + b2i ⎝ b1 − b2i ⎠
⎛ 1 ⎞
2 ⎟ ( 1
=⎜ 2 ⋅ b − b2i )
⎝ b1 + b2 ⎠
3
dan
⎪⎧⎛ 1 ⎞ ⎫⎪
xy −1 = ( a1 + a2i ) ⎨⎜ 2 2 ⎟ ( 1
⋅ b − b2i ) ⎬
⎪⎩⎝ b1 + b2 ⎠ ⎪⎭
⎛ 1 ⎞
2 ⎟ [ 1 1
=⎜ 2 ⋅ a b + a2b2 ] + [ a2b1 − a1b2 ] i
⎝ b1 + b2 ⎠
1
= ( c1 + c2i )
d
dengan d = b12 + b22 , c1 = a1b1 + a2b2 , dan c2 = a2b1 − a1b2 . Selanjutnya diperhatikan pula bahwa:
Menurut sifat bilangan rasional, untuk setiap q ∈ _ , terdapat m ∈ ] dan q ' ∈ _ sehingga
1 c e e 1
q = m + q ' dan q ' ≤ . Dengan demikian terdapat e1 , e2 ∈ ] , sehingga 1 = e1 + 2 dan 2 ≤ .
2 d d d 2
c e e 1
Dengan cara yang serupa 2 = e3 + 4 untuk suatu e3 , e4 ∈ ] dan 4 ≤ .
d d d 2
1
Jadi ( c1 + c2i ) dapat disajikan sebagai:
d
1 c c
( c1 + c2i ) = 1 + 2 i
d d d
⎛ e ⎞ ⎛ e ⎞
= ⎜ e1 + 2 ⎟ + ⎜ e3 + 4 ⎟ i
⎝ d⎠ ⎝ d⎠
⎛e e ⎞
= ( e1 + e3 i ) + ⎜ 2 + 4 i ⎟
⎝d d ⎠
4
dan karena x = y ⋅ ( xy −1 ) , akibatnya:
⎛1 ⎞
x = y ⋅ ⎜ ( c1 + c2i ) ⎟
⎝d ⎠
⎧⎪ ⎛ e e ⎞ ⎫⎪
= y ⎨( e1 + e3 i ) + ⎜ 2 + 4 i ⎟ ⎬
⎪⎩ ⎝ d d ⎠ ⎪⎭
⎛e e ⎞
= y ⋅ ( e1 + e3 i ) + y ⋅ ⎜ 2 + 4 i ⎟ .
⎝d d ⎠
⎛ e2 e4 ⎞
[] (
Diperhatikan karena x ∈ ] i , akibatnya y ⋅ e1 + e3 i + y ⋅ ⎜ ) + i ⎟ ∈ ] [i ] yang juga berakibat
⎝d d ⎠
⎛ e' e' ⎞
y ⋅ ⎜ 2 + 4 i ⎟ ∈ ] [i ] .
⎝d d ⎠
⎛ ⎛ e e ⎞⎞ ⎛1 ⎞
v ⎜ y ⋅ ⎜ 2 + 4 i ⎟ ⎟ = v ⎜ ⋅ ( b1 + b2i ) ⋅ ( e2 + e4i ) ⎟
⎝ ⎝ d d ⎠⎠ ⎝d ⎠
1
= 2 ⋅ ⎡( b1e2 − b2 e4 ) + ( b1e4 − b2 e2 ) ⎤
2 2
d ⎣ ⎦
e22 + e42
= .
d
⎛ ⎛ e2 e4 ⎞⎞ e2 + e2
Untuk menunjukkan bahwa v ⎜ y ⋅ ⎜ + i ⎟ ⎟ < v ( y ) , yaitu dengan menunjukkan 2 4 < d
⎝ ⎝d d ⎠⎠ d
e22 + e42 e2 1 e4 1
atau dengan kata lain 2
< 1 . Karena ≤ dan ≤ , akibatnya
d d 2 d 2
2 2
⎛ e2 ⎞ e2 e2 1 1 1 ⎛e ⎞ e e 1 1 1
⎜ ⎟ = ⋅ ≤ ⋅ = dan ⎜ 4 ⎟ = 4 ⋅ 4 ≤ ⋅ = . Dengan demikian
⎝d⎠ d d 2 2 4 ⎝d⎠ d d 2 2 4
e22 + e42 e22 e42 1 1 1
= 2 + 2 ≤ + = < 1.
d2 d d 4 4 2
5
⎛e e ⎞
Jadi, dapat dipilih p = ( e1 + e3 i ) dan r = y ⋅ ⎜ 2 + 4 i ⎟ , sehingga berlaku:
⎝d d ⎠
x = yp + r , dengan r = 0 atau v ( r ) < v ( y ) .
evalgint.m
function y=evalgint(A)
y = A(1)^2 + A(2)^2;
multgint.m
function [a,b]=multgint(A,B)
a1 = A(1)+A(2)*i;
a2 = B(1)+B(2)*i;
a = real(a1*a2);
b = imag(a1*a2);
subrat.m
function [x1,x2]=subrat(a,b)
c = ceil(abs(a)/b);
if (a < 0)
x1 = -x1;
x2 = -x2;
end;
6
divalggint.m
function [P,R]=divalggint(A,B)
P = zeros(1,2);
R = zeros(1,2);
v1 = evalgint(A);
v2 = evalgint(B);
if (v1 < v2)
P(1) = 0;
P(2) = 0;
R(1) = A(1);
R(2) = A(2);
else
d = evalgint(B);
c1 = A(1)*B(1) + A(2)*B(2);
c2 = A(2)*B(1) - A(1)*B(2);
P(1) = e1;
P(2) = e3;
R(1) = r1/d;
R(2) = r2/d;
end;
Pada program ini, Gaussian Integer dinyatakan sebagai matriks berukuran 1 x 2, misalkan
a + bi ∈ ] [i ] maka matriks yang dimaksud adalah [ a b ] .
Fungsi evalgint digunakan sebagai fungsi evaluasi v , yaitu evalgint([a b]) = a2 + b2.
x2
Fungsi subrat digunakan untuk mencari nilai x1 ∈ ] dan x2 ∈ ] yang memenuhi a = x1 +
b
x2 1
dengan < .
b 2
[]
Fungsi divalggint digunakan untuk mencari nilai p, r ∈ ] i yang memenuhi a = bp + r dengan
r = 0 atau v ( r ) < v ( y ) . Penjelasannya programnya adalah sebagai berikut:
7
P = zeros(1,2);
R = zeros(1,2);
Digunakan untuk memberi nilai awal matriks P = 0 [ 0] dan R = [ 0 0] .
v1 = evalgint(A);
v2 = evalgint(B);
Digunakan untuk mengetahui nilai v ( A ) dan v ( B ) .
d = evalgint(B);
Digunakan untuk mengetahui nilai v ( B ) .
c1 = A(1)*B(1) + A(2)*B(2);
c2 = A(2)*B(1) - A(1)*B(2);
Misalkan A = ⎡⎣ A (1) A ( 2 ) ⎤⎦ dan B = ⎡⎣ B (1) B ( 2 ) ⎤⎦ ,
A (1) + A ( 2 ) i ⎡⎣ A (1) B (1) + A ( 2 ) B ( 2 ) ⎤⎦ + ⎡⎣ A ( 2 ) B (1) − A (1) B ( 2 ) ⎤⎦ C (1) + C ( 2 )
maka = =
B (1) + B ( 2 ) i B (1) + B ( 2 )
2 2
d
dengan C (1) = A (1) B (1) + A ( 2 ) B ( 2 )
C ( 2 ) = A ( 2 ) B (1) − A (1) B ( 2 )
d = B (1) + B ( 2 ) = evalgint ( B ) .
2 2
P(1) = e1;
P(2) = e3;
Membentuk P = e1 [ e3 ] .
8
[r1 r2] = multgint(B,[e2 e4]);
1
Membentuk perkalian B dengan [ e2 e4 ] . Karena r = ⋅ y ⋅ ( e2 + e4i ) , hasil perkalian tersebut
d
1
belum dikalikan dengan , maka dari itu:
d
R(1) = r1/d;
R(2) = r2/d;
Membentuk R = r1 d[ r2 d ] .
ans =
10
v ( 3 − i ) = 32 + ( −1) = 9 + 1 = 10 .
2
Artinya, mencari nilai
m1 =
-10
m2 =
10
9
>> [a,b]=subrat(3,4)
a =
b =
-1
3 ⎛ −1 ⎞ −1 1 1
Artinya, = 1 + ⎜ ⎟ dan = < .
4 ⎝ 4 ⎠ 4 4 2
P =
-2 -1
R =
2 0
Artinya, ( −5 + i ) = ( 3 − i )( −2 − i ) + 2 .
Selain itu selama pengerjaan program ini, sempat muncul beberapa pertanyaan di benakku:
a.) Jika R daerah Euclid terhadap fungsi evaluasi v , apakah ada fungsi evaluasi lain sebut
saja v ' sehingga R juga merupakan daerah Euclid terhadap fungsi evaluasi v ' ?
[]
c.) Misalkan a ∈ ] i dengan a = xy untuk suatu x, y ∈ ] [i ] , apakah ada x ', y ' ∈ ] [i ]
sehingga a = x ' y ' dan x ≠ x ' serta y ≠ y ' ?
Algoritma Pembagian di Gaussian Integer (Versi Prak. Komputasi Aljabar)
Mawi Wijna © 2008, (http://wijna.web.ugm.ac.id & mawius@yahoo.com)
10
d.) Program yang aku buat terbatas hanya pada Gaussian Integer. Hmm...bisakah juga
dibuat program Algoritma Pembagian di ] ⎡ ⎤
⎣ p ⎦ misalnya, dengan p merupakan
bilangan prima?
e.) Oh iya, program buat menghitung gcd-nya belum dibuat ya? Hehehe.
Sekian dulu deh, artikelku ini. Semoga artikel ini bisa bermanfaat bagi orang banyak dan
terutama melatih pemahaman mengenai pemrograman dengan Matlab. Mulai dari perumusan teori
aljabar sampai membuat algoritmanya. Phew, benar-benar melelahkan! Jangan lupa, bagi yang
mengambil Praktikum Komputasi Aljabar, harap artikel ini dipelajari karena mungkin aja keluar pas
ujian akhir, hehehe. Kalau ada pertanyaan layangkan aja surat elektronik ke alamat e-mail di
footer artikel ini atau sekalian saja kunjungi websitenya (promosi nih!). Akhir kata, terima kasih!
H. Referensi
Inspriasi dari Sang Khalik yang muncul tiba-tiba di waktu dan tempat yang tak terduga.
(God works in mysterious way...)
Kuliah Peng. Struktur Aljabar II yang diterangkan oleh Bu Indah hari Rabu, 10-Desember-2008.
Coret-coretan dan pekerjaannya Andreas, yang dengan terpaksa kusuruh dia menjadi buruh hitung
bilangan kompleks.
Dubinsky Ed, Learning Abstract Algebra with ISETL, Springer-Verlag, New York, 1994.
Fraleigh J.B., A First Course In Abstract Algebra, Addison-Wesley, New York, 1994.
11