Lewati ke konten utama

Bagian 4.3 Metode Kuadrat Berulang

Menghitung pangkat besar dapat memakan waktu sangat lama. Sebagaimana siapa pun dapat menghitung \(2^2\) atau \(2^8\text{,}\) semua orang mengetahui cara menghitung
\begin{equation*} 2^{2^{1{,}000{,}000} }\text{.} \end{equation*}
Akan tetapi, bilangan tersebut begitu besar sehingga kita tidak ingin mencoba melakukan perhitungannya; lebih jauh lagi, setelah titik tertentu komputasi itu tidak mungkin dilakukan sekalipun semua komputer di dunia tersedia bagi kita. Bahkan menuliskan representasi desimal bilangan yang sangat besar mungkin tidak masuk akal. Panjangnya dapat mencapai ribuan atau bahkan jutaan digit. Akan tetapi, jika kita dapat menghitung sesuatu seperti
\begin{equation*} 2^{37{,}398{,}332 } \pmod{ 46{,}389}\text{,} \end{equation*}
kita dapat menuliskan hasilnya dengan sangat mudah karena hasil tersebut berupa bilangan antara \(0\) dan \(46{,}388\text{.}\) Jika kita ingin menghitung perpangkatan modulo \(n\) dengan cepat dan efisien, kita harus menggunakan cara yang cerdik.
 1 
Hasil-hasil dalam bagian ini hanya diperlukan dalam Bab 7
Hal pertama yang perlu diperhatikan adalah bahwa sebarang bilangan \(a\) dapat ditulis sebagai jumlah pangkat-pangkat berbeda dari \(2\text{;}\) artinya, kita dapat menuliskan
\begin{equation*} a = 2^{k_1} + 2^{k_2} + \cdots + 2^{k_n}\text{,} \end{equation*}
dengan \(k_1 \lt k_2 \lt \cdots \lt k_n\text{.}\) Ini tidak lain adalah representasi biner dari \(a\text{.}\) Sebagai contoh, representasi biner dari \(57\) adalah \(111001\text{,}\) karena kita dapat menuliskan \(57 = 2^0 + 2^3 + 2^4 + 2^5\text{.}\)
Hukum-hukum eksponen tetap berlaku dalam \({\mathbb Z}_n\text{;}\) artinya, jika \(b \equiv a^x \pmod{ n}\) dan \(c \equiv a^y \pmod{ n}\text{,}\) maka \(bc \equiv a^{x+y} \pmod{ n}\text{.}\) Kita dapat menghitung \(a^{2^k} \pmod{ n}\) dengan \(k\) perkalian melalui perhitungan
\begin{gather*} a^{2^0} \pmod{ n}\\ a^{2^1} \pmod{ n }\\ \vdots\\ a^{2^k} \pmod{ n}\text{.} \end{gather*}
Setiap langkah melibatkan penguadratan jawaban yang diperoleh pada langkah sebelumnya, pembagian dengan \(n\text{,}\) dan pengambilan sisanya.

Contoh 4.3.1.

Kita akan menghitung \(271^{321} \pmod{ 481}\text{.}\) Perhatikan bahwa
\begin{equation*} 321 = 2^0 +2^6 + 2^8; \end{equation*}
jadi, menghitung \(271^{ 321} \pmod{ 481}\) sama dengan menghitung
\begin{equation*} 271^{ 2^0 +2^6 + 2^8 } \equiv 271^{ 2^0 } \cdot 271^{2^6 } \cdot 271^{ 2^8 } \pmod{ 481}\text{.} \end{equation*}
Jadi, cukup dihitung \(271^{ 2^i } \pmod{ 481}\) dengan \(i = 0, 6, 8\text{.}\) Sangat mudah dilihat bahwa
\begin{equation*} 271^{ 2^1} = 73{,}441 \equiv 329 \pmod{ 481}\text{.} \end{equation*}
Kita dapat menguadratkan hasil ini untuk memperoleh nilai \(271^{ 2^2} \pmod{481}\text{:}\)
\begin{align*} 271^{ 2^2} & \equiv (271^{ 2^1})^2 \pmod{ 481}\\ & \equiv (329)^2 \pmod{481}\\ & \equiv 108{,}241 \pmod{481}\\ & \equiv 16 \pmod{481}\text{.} \end{align*}
Kita menggunakan fakta bahwa \((a^{2^n})^2 \equiv a^{2 \cdot 2^n} \equiv a^{ 2^{n+1} } \pmod{ n}\text{.}\) Dengan melanjutkan perhitungan, kita memperoleh
\begin{equation*} 271^{ 2^6 } \equiv 419 \pmod{481} \end{equation*}
dan
\begin{equation*} 271^{ 2^8 } \equiv 16 \pmod{481}\text{.} \end{equation*}
Oleh karena itu,
\begin{align*} 271^{ 321} & \equiv 271^{ 2^0 +2^6 + 2^8 } \pmod{481}\\ & \equiv 271^{ 2^0 } \cdot 271^{ 2^6 } \cdot 271^{ 2^8 } \pmod{481}\\ & \equiv 271 \cdot 419 \cdot 16 \pmod{ 481}\\ & \equiv 1{,}816{,}784 \pmod{ 481}\\ & \equiv 47 \pmod{ 481}\text{.} \end{align*}
Metode kuadrat berulang akan menjadi perangkat yang sangat berguna ketika kita membahas kriptografi RSA dalam Bab 7. Untuk menyandikan dan menguraikan pesan secara wajar dalam skema ini, kita harus mampu menghitung pangkat besar bilangan bulat modulo \(n\) dengan cepat.