UJI PRIMALITAS LUCAS-LEHMER
MENGGUNAKAN PROGRAM KOMPUTER
Sangadji
1; Kelly Swandana
21 Staf peneliti PPIN Batan, Serpong,
Kawasan Puspiptek Gedung 71 Lantai 1, Tangerang 15314 [email protected]
2 Jurusan Matematika, Fakultas Sains dan Teknologi, Universitas Bina Nusantara Jln. K.H. Syahdan No. 9, Palmerah, Jakarta Barat 11480
ABSTRACT
Several theories prime test have been developed to identify very large prime numbers. Each of these theories that have been developed up to now has not been really perfect in identifying prime numbers. However, the theory has been developed into the largest prime number search algorithm today is the Lucas-Lehmer theorem. In designing this algorithm, the authors develop a prime number test program bsed on the Lucas-Lehmer theorem. Program evaluation results show that the said theorem is able to test very large prime numbers. Test programs’ weakness is in length of calculation and testing time. However, for some particular cases it is observed that Lucas-Lehmer theorem is better than Pocklington theorem in identifying prime numbers.
Keywords: cryptography, prime test, Lucas-Lehmer, pocklington
ABSTRAK
Untuk mengenali bilangan-bilangan prima yang sangat besar dikembangkanlah beberapa teori uji primalitas. Masing-masing teori yang telah dikembangkan sampai saat ini belum ada yang benar-benar sempurna dalam mengenali bilangan prima. Namun, teori yang banyak dikembangkan menjadi algoritma pencarian bilangan prima terbanyak saat ini adalah Teorema Lucas-Lehmer. Dalam perancangan algoritma ini, penulis membuat program pengujian bilangan prima dengan menggunakan teori dasar Teorema Lucas-Lehmer Hasil evaluasi program menunjukkan bahwa teorema di atas dapat menguji bilangan – bilangan prima. Kelemahan program dalam pengujian bilangan prima yang relatif besar adalah lamanya waktu perhitungan dan pengujian. Namun, untuk beberapa kasus tertentu didapatkan Teorema Lucas-Lehmer lebih baik dibandingkan dengan Teorema Pocklington dalam mengenali suatu bilangan prima.
PENDAHULUAN
Teori bilangan merupakan salah satu cabang matematika yang telah lama dipelajari. Pada awalnya, ‘keindahan’ sifat bilangan atau sistem bilangan merupakan suatu daya tarik tersendiri bagi pakar-pakar matematika dalam mengembangkan konsep-konsep dalam teori bilangan. Salah satu bagian penting dari teori bilangan yang memiliki ‘keindahan’ ini adalah konsep bilangan prima. Suatu bilangan bulat, n > 1, disebut bilangan prima bila n hanya punya pembagi 1 dan n sendiri. Bilangan prima memiliki keunikan karena sifat-sifatnya yang khas dalam teori bilangan. Sebagai contoh, Teori Fundamental Aritmatika menunjukkan bahwa bilangan-bilangan prima adalah faktor penyusun bilangan-bilangan bulat positif. Setiap bilangan bulat positif dapat dinyatakan secara tunggal sebagai bilangan prima atau hasil perkalian dari bilangan-bilangan prima tanpa memperhatikan urutannya.
Semenjak Rivest, Shamir & Adleman (1978) mengenalkan skema kriptografi kunci publik untuk menjaga kerahasiaan dan mengamankan pengiriman pesan, maka pengetahuan dan konsep teori bilangan semakin meluas dimanfaatkan dalam menunjang perkembangan teknologi informasi. Skema kriptografi kunci publik ini bekerja berdasarkan pada sifat-sifat bilangan prima. Kehandalan skema ini bergantung pada kemampuan kita untuk menemukan bilangan-bilangan prima yang sangat besar. Sedangkan tingkat keamanannya bergantung pada ketidakmampuan kita memfaktorkan suatu bilangan bulat positif sebagai hasil perkalian bilangan-bilangan prima yang besar. Sehingga dapat disimpulkan bahwa semakin besar suatu bilangan prima, maka semakin unik pula sifatnya dan akan semakin besar manfaatnya. Oleh karena itu, orang kemudian berlomba-lomba untuk menemukan bilangan prima yang lebih besar daripada yang ditemukan sebelumnya. Metode Lucas-Lehmer merupakan suatu metode uji primalitas yang telah banyak dipergunakan orang untuk mencari bilangan prima yang besar. Sampai saat ini, metode ini masih dipercaya kehandalannya untuk mengenali bilangan prima yang besar tanpa harus memfaktorkan bilangan tersebut. Metode ini menggunakan bilangan Mersenne sehingga lebih cepat dalam prosesnya dibandingkan dengan metode lainnya, seperti metode Pocklington. Bahkan bilangan prima yang terbesar yang berhasil ditemukan pada Februari 2005 merupakan hasil uji algoritma Lucas-Lehmer. Makalah ini akan membahas tentang algoritma uji Lucas-Lehmer dan solusi contoh penerapannya dengan bantuan program komputer. Sehingga mempermudah dalam proses pengujiannya.
Lucas Lehmer
Bilangan Prima adalah Bilangan bulat positif 1 hanya mempunyai satu pembagi positif. Setiap bilangan bulat positif lainnya mempunyai minimal dua pembagi positif karena pasti dapat dibagi oleh 1 dan bilangan itu sendiri.
Definisi
Bilangan prima adalah bilangan bulat positif yang lebih besar dari 1 dan hanya dapat dibagi oleh 1 dan bilangan itu sendiri.
Contoh : bilangan bulat positif 2, 3, 5, 89, dan 101 adalah bilangan-bilangan prima. Greatest Common Divisor (Pembagi Persekutuan Terbesar)
Suatu bilangan bulat b dikatakan dapat habis dibagi oleh bilangan bulat a ≠ 0, ditulis dengan notasi a | b, jika terdapat bilangan bulat c sedemikian sehingga b = ac. Kita tuliskan a b untuk menunjukkan bahwa b tidak habis dibagi a.
Kita ambil bilangan – bilangan bulat positif a dan b, dengan setidaknya salah satu dari keduanya tidak sama dengan 0. Greatest Common Divisor dari a dan b, ditandakan dengan gcd(a,b) adalah bilangan bulat positif d yang memenuhi syarat-syarat:
d | a dan d | b.
Jika c | a dan c | b, maka c ≤ d.
Bilangan Mersenne
Suatu bilangan bulat berbentuk 2m – 1 telah dipelajari secara mendalam oleh banyak
matematikawan terdahulu. Pada tahun 1536, Hudalricus Regius menunjukkan bahwa 211 – 1 bukan
bilangan prima karena dapat difaktorkan menjadi 23.89.
Marin Mersenne pada tahun 1644 menyatakan bahwa 2m – 1 adalah bilangan prima untuk m =
2, 3, 5, 7, 13, 17, 19, 31, 67, 127, dan 257 dan merupakan bilangan komposit untuk m lainnya, dan hingga saat ini jika 2m – 1 merupakan bilangan prima dikatakan sebagai bilangan prima Mersenne.
Definisi
Jika m adalah bilangan bulat positif, maka Mm = 2
m – 1 disebut bilangan Mersenne ke-m; jika p adalah
bilangan prima dan Mp = 2
p – 1 adalah prima, maka M
p disebut sebagai bilangan prima Mersenne.
Teorema
Jika p adalah bilangan prima ganjil, maka setiap pembagi dari bilangan Mersenne Mp = 2 p - 1
berbentuk 2kp + 1, di mana k adalah bilangan bulat positif. Bukti
Ambil q sebagai bilangan prima yang membagi Mp = 2
p – 1. Dengan menggunakan teorema Fermat,
kita tahu bahwa q | (2q-1 – 1).
Karena q merupakan faktor pembagi dari 2p – 1 dan 2q-1 -1, kita tahu bahwa (2p – 1, 2q-1 -1) >
1. Dari yang telah dibuktikan pada teorema 2.3.1 di atas, kita dapatkan p | (q – 1) sehingga ada sebuah bilangan bulat positif m sedemikian sehingga q – 1 = mp. Karena q adalah bilangan ganjil, maka m haruslah bilangan genap, m = 2k, di mana k adalah suatu bilangan bulat positif. Kita dapatkan q = mp + 1 = 2kp + 1. Karena setiap pembagi dari Mp adalah sebuah produk dari pembagi prima dari Mp,
setiap pembagi prima dari Mp berbentuk 2kp + 1, dan hasil dari bilangan yang berbentuk seperti ini
akan memiliki bentuk yang sama, yaitu bilangan ganjil. (Burton, 2002)
Pengembangan Teorema
Dalam penelitian dan perancangan algoritma ini, akan dibahas mengenai beberapa teorema uji primalitas yang terbaru. Teorema-teorema ini akan dipergunakan dalam pengembangan algoritma yang akan dirancang. Berikut ini adalah teorema-teorema uji primalitas.
Teorema Lucas-Lehmer
Terdapat sebuah bilangan prima ganjil p. Mp adalah bilangan prima jika dan hanya jika
(p )
(
M
p)
S
−1=
0
mod
di mana S1 = 4 danS
n=
S
n2−1−
2
.Bukti
Misalkan w = 2 + 3 dan v = 2− 3. Maka, dengan mudah dapat kita tunjukkan bahwa
1 1 2 2 −
+
−=
n nv
w
S
n . Jadi, Mp membagi Sp-1 berarti terdapat sebuah bilangan bulat positif RAtau, setelah kita kalikan dengan 2p−2
w
dan dikurangi satu, akan kita dapatkan1
2 1 2 2p−=
⋅
⋅
p−−
w
M
R
w
p ………...(1) dan setelah dikuadratkan(
2)
2 2 21
−
⋅
⋅
=
p− pw
M
R
w
p ………...(2)Dengan menggunakan pembuktian secara kontradiksi, kita asumsikan Mp adalah bilangan
komposit dan pilih salah satu faktor pembagi primanya q yang tidak lebih besar dari akar kuadratnya. Anggap grup G = Ζq
[ ]
3 terdiri dari semua bilangan dengan bentuka
+
b
3
mod
q
yang memiliki invers, dengan catatan G memiliki paling banyak 2−
1
q
elemen. Melihat w mod q, persamaan (1) dan (2) di atas menjadi 2p−1=
−
1
w
dan 2p=
1
w
, menunjukkan bahwa w adalah sebuah elemen dari G dengan order 2p. Karena order dari sebuah elemen dalam suatu grup tidak akanlebih besar dari order grup itu sendiri, sehingga kita dapatkan 2 ≤ 2 −1 < = 2p −1
p p
M q
suatu kontradiksi, memenuhi syarat cukup.
Untuk memenuhi syarat perlu, sekarang kita asumsikan Mp adalah bilangan prima. Hukum
dua arah (resiprok) mengimplikasikan :
1 3 3 − = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ − = ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ p p M M 1 = −1 ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ − p M
Karena
M
p≡
7
mod
12
dengan p adalah bilangan prima ganjil. Sehingga kita tahu bahwaG memiliki order 2p dan Si = TrGΖq
(
2 + 3)
2i−1,i = 1,2,.... Sekarang kita selesaikan dalam G saja, karena(
)
(
)
(
4 2 3)
2 3 2 1 3 2 4 2 3 1 2 1 2 2 1 + = + = + = ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ + − − p p sehingga(
)
(
)
( )(
)
p p p p p p 2 2 1 2 2 1 2 3 1 2 3 1 2 3 2 1 1 + = ⎥ ⎦ ⎤ ⎢ ⎣ ⎡ + = + − − − −Karena 2p = 1 dan
(
p
−
1
)
2
p−1≡
−
1
mod
p
, kita tahu bahwa 2(p−1)2p−1 = 1 2. Juga dengan teorema binomial,
(
1+ 3)
2p = 1+ 2p 3 + 2p( )
3 2p−1 +( )
32p(tiap unit di bagian tengah merupakan sebuah pembagi dari q dalam koefisien binomialnya.) 1 32 −1
(
1 32 −1−1)
3+ + +
Berdasarkan hukum dua arah di atas, kita dapat bahwa 3 bukanlah kuadrat sempurna dalam
q
Ζ
, sehingga kita dapat membuat(
−
1
)
2
=
2
p−1−
1
q
berpasangan dari 1 sampaiq
−
1
. Dengan demikian, hasil dari tiap pasangan adalah 3, dan hal ini mengimplikasikan32 1 1
(
1)
! 1 − = − = − − q pDengan Lemma Wilson, kita dapatkan
(
1+ 3)
2P =(
1−3)
+ 3(
1−1)
= −2Sehingga
(
2 + 3)
2p−1 = −1 dengan persamaan di atas kita dapatkan(
2+ 3)
2p−2 =α
3Untuk beberapa
α
∈
Ζ
q dimana hasil kuadratnya adalah -1/3. Sehingga1 /
(
2 3)
2 / 3 0 2 = = + = Ζ Ζ − −α
q G q G p Tr Tr a pyang membuktikan pernyataan tersebut. (Niven, Zukerman dan Montgomery, 2001) Contoh :
Akan dibuktikan bahwa 27 – 1 adalah bilangan prima :
(
)
(
)
(
)
(
)
(
111*111 2)
mod127 0 111 127 mod 2 42 * 42 42 127 mod 2 67 * 67 67 127 mod 2 14 * 14 14 127 mod 2 4 * 4 4 5 4 3 2 1 0 = − = = − = = − = = − = = − = = S S S S S STerbukti bahwa
S
p−2=
0
, maka 27 – 1 = 127 merupakan bilangan prima.
Teori uji primalitas ini merupakan inisiatif dari Lucas pada akhir tahun 1870 dan disederhanakan oleh Lehmer pada tahun 1930. Setiap barisan Sp dimodulokan 2p - 1 untuk
mempercepat perhitungan. Uji ini ideal untuk komputer biner karena pembagian oleh 2p - 1 dapat
dilakukan hanya dengan menggunakan perputaran dan penjumlahan saja.
METODE PERANCANGAN
Untuk menyelesaikan masalah uji primalitas dengan program komputer, terlebih dahulu dilakukan rancangan program seperti yang ditunjukkan dalam modul-modul dan tipe data berikut ini:
Tipe Data yang digunakan
Untuk dapat menguji bilangan yang cukup besar diperlukan penampung data (tipe data) yang besar pula. Pada metode yang penulis gunakan, terdapat suatu pengujian berdasarkan rumus
1
)
,
1
gcd(
( −1)/−
=
n
i
p n n
a
( −1)/ jauh lebih besar dari daya tampung tipe data yang telah tersedia, sehingga hasil perhitungan menjadi tidak akurat. Oleh karena itu diperlukanlah suatu tipe data baru yang dapat menampung hasil perhitungan di atas dan dukungan algoritma – algoritma perhitungan untuk tipe data yang baru tersebut.Tipe data baru yang akan penulis gunakan adalah tipe data String, di mana tipe data ini dapat menampung bilangan yang sangat besar. Supaya tipe data ini dapat kita gunakan dalam perhitungan, maka diperlukanlah modul – modul untuk mengoperasikan tipe data tersebut. Modul dasar operasinya adalah Modul Penjumlahan, Modul Pengurangan, Modul Perkalian dan Modul Pembagian. Kemudian modul – modul ini digunakan sebagai dasar perhitungan dari fungsi – fungsi / modul – modul yang lain. Modul Penjumlahan dan Modul Pengurangan sama seperti dasar algoritma penjumlahan dan pengurangan bilangan. Modul Perkalian dari bilangan a dan b menggunakan Modul Penjumlahan bilangan a diulang sebanyak b kali. Sedangkan Modul Pembagian (a membagi b) menggunakan Modul Pengurangan b dengan a terus menerus hingga b lebih kecil dari a. Jumlah perulangan dari pengurangan terserbut adalah hasil bagi, dan nilai b terakhir yang lebih kecil dari a merupakan sisa.
Tahapan yang Digunakan
Tahapan yang digunakan untuk menyelesaikan masalah di atas meliputi :
Tahap Validasi; pada tahap ini, input yang dimasukkan oleh user akan diperiksa. Input harus berupa bilangan ganjil dan lebih besar dari 1. Jika input tidak memenuhi syarat tersebut, maka akan ditampilkan pesan kesalahan.
Tahap Utama Uji Primalitas; tahap Lucas-Lehmer, terdapat 2 tahap pengujian yaitu tahap pengujian dengan kuadrat cepat dan tahap pencarian faktor.
Tahap pertama dari Modul Uji Lucas-Lehmer adalah menguji bilangan Mersenne berdasarkan rumus =
(
−12 − 2) (
mod2 −1)
p n
n S
S . Bilangan Mersenne dihasilkan dari p, dimana p adalah bilangan yang diinput. Pengujian bilangan tersebut dilakukan berdasarkan dengan teorema Lucas-Lehmer. Proses pengkuadratan dilakukan dengan cara membagi proses pengkuadratan menjadi dua bagian sama besar kemudian dijalankan proses kuadrat biasa terhadap kedua bagian tersebut, baru kemudian digabungkan kembali dan didapatkan hasil kuadrat dengan waktu dua kali lebih cepat dari pengkuadratan biasa. Sebagai langkah awal pengujian ditetapkan S = 4, kemudian dilakukan perulangan sebanyak
p
−
3
kali untuk mendapatkanS
p−2=
0
. Jika didapatkanS
p−2=
0
, makabilangan Mersenne tersebut merupakan bilangan prima. Namun, jika
S
p−2≠
0
maka bilangan Mersenne tersebut bukanlah bilangan prima. Tahap kedua adalah pencarian faktor. Tahap ini hanya dilakukan bila bilangan Mersenne, Mn yang diuji dinyatakan sebagai bilangan komposit. Pencarianfaktor ini dilakukan untuk membuktikan bahwa bilangan tersebut memang bukan bilangan prima. Faktor yang didapat akan ditampilkan sebagai output. Pemfaktoran Mn – 1 berdasarkan Teorema
Fundamental Aritmetika dan Metode Eratosthenes, di mana nilai Mn – 1 diuraikan satu – persatu
dimulai dari bilangan prima terkecil, yaitu 2, dengan menggunakan Modul Pembagian sampai dengan
n
M
, hingga didapatlah faktor – faktor primanya. Kemudian dari faktor-faktor prima tersebut didapatkanlah suatu variabel m dan j, di manap
=
m
⋅
j
,
m
>
M
n dan kss k k
p
p
p
m
1 2...
2 1=
.Untuk suatu n = a / b, di mana a ≥ b, nilai n akan semakin kecil jika nilai b semakin besar. Sehingga untuk memperkecil proses perhitungan, nilai m sebagai pembagi dari (Mn – 1), sebaiknya diperoleh
dari perkalian faktor – faktor prima Mn – 1 yang terbesar, hingga memenuhi syarat
m
>
M
nDiagram Alir Modul Utama
Diagram alir Modul Lucas-Lehmer menjelaskan pengujian primalitas suatu bilangan Mersenne yang dapat dilihat pada Gambar 1 (Robertson, 2000).
Gambar 1 Gambar Diagram Alir Modul Utama Lucas-Lehmer
HASIL DAN PEMBAHASAN
Adapun hasil dari rancangan program komputer yang telah dibuat dengan bahasa pemrograman Delphi seperti yang ditampilkan pada gambar berikut ini :
Modul Utama
Pada saat menjalankan UjiPrima.exe, akan tampil Form seperti tampak pada Gambar 2. Modul ini sebagai modul utama dan keseluruhan dari program.
Pada form ini terdapat judul dan 2 main menus yang menampilkan pilihan untuk dijalankan, yaitu Menu dan Keterangan. Pada bagian Menu terdapat 4 pilihan, yaitu Lucas-Lehmer, Pocklington, Uji Banding, dan Keluar. Sedangkan pada bagian Keterangan terdapat menu About.
Gambar 3 Tampilan Uji Lucas-Lehmer Tidak Prima
Jika pada bagian Menu dari halaman utama dipilih Lucas-Lehmer, maka akan ditampilkan Uji Lucas-Lehmer. Pada tampilan ini (Gambar 3) terdapat sebuah field , di mana pemakai dapat memasukkan nilai p dari bilangan Mersenne yang akan diuji. Tombol “?Uji” berfungsi untuk memulai proses pengujian berdasarkan teorema Lucas-Lehmer dan akan ditampilkan hasil uji pada Memo di bawahnya. Jika p yang diinput menghasilkan bilangan prima Mersenne, maka akan ditampilkan seperti Gambar 4.
Gambar 4 Tampilan Uji Lucas-Lehmer Prima
Pembahasan
Proses pengujian algoritma berdasarkan lamanya waktu perhitungan terhadap bilangan yang akan diuji, serta ketepatan suatu algoritma dalam mengenali suatu bilangan prima. Tabel 1 berikut ini adalah hasil uji berdasarkan algoritma Lucas-Lehmer.
Tabel 1 Analisa Program Lucas-Lehmer dalam Menguji Bilangan yang Diinput dan Hasil Ujinya.
(Bilangan yang diinput adalah n, deret Mersenne
M
n=
2
n−
1
,
n
≥
1
.)n Bilangan Jumlah digit Waktu Hasil Uji
2 3 1 0 ms Prima 3 7 1 0 ms Prima 4 15 2 0 ms 3 * 5 5 31 2 0 ms Prima 6 63 2 0 ms 3 * 21 7 127 3 0 ms Prima 8 255 3 15 ms 3 * 85 9 511 3 30 ms 7 * 73 10 1023 4 77 ms 3 * 341 11 2047 4 109 ms 23 * 89 12 4095 4 77 ms 3 * 1365 13 8191 4 828 ms Prima
17 131071 6 1 menit, 5 detik, 657 ms Prima 19 524287 6 4 menit, 33 detik, 235
ms
Prima
PENUTUP
Berdasarkan evaluasi hasil yang diperoleh pada program ini dapat disimpulkan bahwa dengan adanya program ini maka Uji primalitas Teorema Lucas-Lehmer dapat diselesaikan dengan cepat. Demikian juga untuk beberapa kasus, algoritma Lucas-Lehmer dapat membuktikan primalitas suatu bilangan dengan lebih tepat dengan waktu yang dibutuhkan untuk mengenali suatu bilangan prima yang besar algoritma Lucas-Lehmer relatif membutuhkan waktu yang relatif lebih lama.
DAFTAR PUSTAKA
Burton, David M.,2002, Elementary Number Theory, Fifth Edition, McGraw-Hill Higher Education, McGraw-Hill Company, New York.
Niven, I., H. Zuckerman, and H. Montgomery, 2001,An Introduction to the Theory of Numbers, six
Edition, John Wiley & Sons Inc., New York.
Rivest, R., Shamir, A., dan Adleman L. (1978) A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. Communications of the ACM 21 (2): 120–126. doi:10.1145/359340.359342.
Robertson, L.A., (2000), Simple Program Design: A Step By Step Approach, Third Edition, Course Technology, Cambridge.
Rosen, K.H., (2000), Elementary Number Theory and Its Application, Fourth Edition, Addison Wesley Longman, Inc., Massachusetts.