Sebagai seorang programmer, penting untuk memahami tentang bilangan prima. Memahami bilangan prima dan sifat-sifatnya dapat membantu dalam mengembangkan algoritma yang lebih efisien, memecahkan masalah matematika, dan memahami algoritma kriptografi yang sering digunakan dalam keamanan data.
Definisi Bilangan Prima
Bilangan prima (Prime Number) adalah bilangan asli yang lebih besar dari 1 dan hanya memiliki dua pembagi yang berbeda, yaitu 1 dan dirinya sendiri. Bilangan-bilangan ini tidak dapat dibagi habis oleh bilangan lain kecuali oleh 1 dan bilangan itu sendiri.
Sifat-sifat yang menjadi ciri sebuah bilangan adalah prima disebut primalitas (Primality). Untuk mengecek apakah sebuah bilangan adalah prima diperlukan tes primalitas (Primality Test). Jika bilangan tersebut memiliki primalitas (memenuhi semua sifat bilangan prima) maka bilangan tersebut adalah prima.
Bilangan lebih dari satu yang tidak termasuk prima disebut komposit (Composite Number). Bilangan Komposit akan membentuk pola segi empat jika disusun, sedangkan bilangan prima tidak. Lihat ilustrasi di bawah!
4 Metode atau Algoritma Mencari Bilangan Prima
Saya memberikan tidak hanya satu metode agar Kamu tahu bahwa banyak metode mencari bilangan prima.
Berikut beberapa metode untuk mencari bilangan prima :
1. Metode Brute Force
Metode Brute Force adalah pendekatan sederhana untuk mencari bilangan prima dengan menguji setiap bilangan secara berurutan untuk memeriksa apakah itu prima atau bukan.
Metode Brute Force lebih ditujukan untuk mengecek primalitas dari sebuah bilangan acak. Misal kita ingin mengecek apakah bilangan x adalah prima, lebih baik gunakan metode Brute Force.
Metode ini sederhana tetapi tidak efisien untuk mencari bilangan prima yang sangat besar karena memerlukan banyak pengujian. Kompleksitas waktu metode ini adalah O(n), di mana n adalah bilangan yang ingin diperiksa, yang berarti harus melakukan pengujian sebanyak bilangan tersebut.
Algoritma Brute Force sebagai berikut:
- Tentukan bilangan yang ingin diuji.
- Jika bilangan kurang dari atau sama dengan 1, bukan prima.
- Uji apakah bilangan tersebut memiliki pembagi selain 1 dan dirinya sendiri.
-
Untuk menguji, lakukan :
- Iterasi semua bilangan dari 2 hingga bilangan - 1.
- Hitung sisa bagi dari bilangan yang diuji dengan bilangan iterasi.
- Jika terdapat satu saja bilangan iterasi yang membagi habis bilangan yang diuji, maka bukan prima.
- Tetapi jika tidak ada, maka bilangan tersebut prima.
Algoritma Brute Force dalam Pseudocode
fungsi isPrime(bilangan): jika bilangan <= 1: kembalikan false untuk setiap i dari 2 hingga bilangan - 1: jika bilangan mod i == 0: kembalikan false kembalikan true
Program Mencari Bilangan Prima dengan Algoritma Brute Force
Berikut saya menggunakan bahasa JavaScript untuk mengimplementasikan algoritma Brute Force.
Penjelasan baris per baris:
-
function isPrime(number)
: Mendefinisikan fungsiisPrime
yang menerima satu parameternumber
, yaitu bilangan yang akan diperiksa. -
if (number <= 1) { return false; }
: Pada baris ini, dilakukan pengecekan apakah number kurang dari atau sama dengan 1. Jika iya, maka bilangan tersebut bukanlah bilangan prima, sehingga fungsi mengembalikan false. -
for (let i = 2; i < number; i++) {
: Di sini, kita melakukan iterasi menggunakan variabeli
dari 2 hingga bilangan sebelumnumber
. -
if (number % i === 0) { return false; }
: Pada setiap iterasi, kita memeriksa apakahnumber
dapat dibagi habis olehi
. Jika hasil sisa pembagiannumber % i
adalah 0, itu berartinumber
memiliki faktor pembagi selain 1 dan dirinya sendiri. Oleh karena itu, fungsi mengembalikanfalse
. -
Jika program melewati semua iterasi tanpa melakukan
return false
, itu berartinumber
tidak dapat dibagi habis oleh bilangan lain selain 1 dan dirinya sendiri, sehingga bilangan tersebut adalah bilangan prima. Fungsi mengembalikantrue
.
Dengan demikian, fungsi isPrime
ini dapat digunakan untuk
memeriksa keprimaan suatu bilangan dalam program.
2. Metode Trial Division
Metode ini adalah pengembangan dari metode Brute Force. Algoritmanya sama, hanya saja metode ini membatasi pengecekan hanya sampai akar dari bilangan yang diuji.
Mencari primalitas dari bilangan 6 memang cepat, hanya perlu mengulangi pengujian sebanyak 6 kali. Namun bagaimana jika bilangannya 987.688 atau lebih banyak? Mengulangi pengecekan sebanyak itu akan memakan waktu dan sumber daya yang banyak.
Pengujian hanya perlu dilakukan sampai √ n. Mengapa demikian?
Baik, kita langsung ambil contoh. Misal n adalah 11.
Akar 11 adalah 3.31.
Kita lakukan pengujian dari 2 sampai kurang dari atau sama dengan 3.31.
11 % 2 = sisa 1.
11 % 3 = sisa 2.
Dengan hanya melakukan pengujian sampai akar dari 11, kita sudah tahu, bahwa tidak terdapat bilangan yang membagi habis 11.
Tidak perlu melanjutkan pengujian sampai 11 karena sudah pasti tidak ada yang bisa membagi habis bilangan 11.
Coba saja kita uji dengan bilangan 4.
11 % 4 = sisa 3.
4 adalah kelipatan 2. Sebelumnya sudah diuji dengan 2 dan tidak habis. Maka jika diuji dengan semua kelipatan 2, tidak akan habis.
Lalu, jika 11 dibagi 2, hasilnya adalah 5, maka 5 dan kelipatannya tidak akan membagi habis bilangan 11.
Kemudian, karena 3 tidak bisa membagi habis 11, maka 3 dan kelipatannya tidak bisa membagi habis 11.
Contoh kedua: misalkan n adalah 49.
Akar dari 49 adalah 7.
Jika akar kuadrat dari suatu bilangan adalah bilangan bulat, maka berarti bilangan tersebut dapat dibagi habis oleh akar kuadratnya. Jadi jika suatu bilangan memiliki akar kuadrat yang merupakan bilangan bulat, sudah pasti bukan bilangan prima tanpa perlu mencari faktor pembagi yang lain.
Tapi tidak setiap bilangan yang memiliki akar kuadrat desimal adalah prima.
Perlu pengujian lanjut untuk mengetahuinya.
Algoritma Trial Division dalam Pseudocode
fungsi isPrime(bilangan): jika bilangan <= 1: kembalikan false untuk setiap i dari 2 hingga kurang dari sama dengan akar bilangan: jika bilangan mod i == 0: kembalikan false kembalikan true
Program Mencari Bilangan Prima dengan Algoritma Trial Division
Berikut adalah contoh program menggunakan metode trial division untuk mencari bilangan prima dalam JavaScript:
JavaScript mempunya metode bawaan untuk menghitung akar kuadrat bilangan yaitu
Math.sqrt()
.
Beberapa bahasa pemrograman yang mendukung operasi matematika seperti: Phyton; PHP; Java; C/C++; Ruby; dan Kotlin; memiliki metode bawaan untuk menghitung akar kuadrat.
3. Metode Perulangan Terbalik
Terpikir di benak saya untuk membuat perulangan terbalik dalam pengujian primalitas. Dimulai dari akar kuadrat bilangan sampai lebih dari sama dengan 2.
Perulangan terbalik ini akan membuat pengujian lebih efektif untuk beberapa kasus.
Sebagai contoh:
Misalkan n adalah 49 dan memiliki akar kuadrat bilangan bulat 7.
Setiap bilangan yang memiliki akar kuadrat berupa bilangan bulat maka dia adalah komposit, bukan prima.
4 bukan prima, akar 4 adalah bilangan bulat 2. 9 bukan prima, akar kuadratnya adalah 3.
Dalam hal ini, jika akar kuadrat bilangan adalah bilangan bulat, perulangan terbalik hanya akan membuat pengujian satu kali putaran. Karena dimulai dari akar kuadrat bilangan tersebut yang sudah pasti menghasilkan `false` ketika bilangan dimodulus dengan akar kuadrat pada putaran pertama.
Pada putaran pertama, n adalah 49 dan i sama dengan 7 (akar n). Maka hanya dengan putaran pertama hasil sudah ditentukan, 49 % 7 adalah 0, maka false, bukan prima.
Berikut kode program JavaScript Metode Perulangan Terbalik.
Lihat perbandingannya!
Perulangan Terbalik (kiri) memerlukan satu kali loop. |
Dengan ini, pengujian akan dilakukan dengan lebih cepat untuk kasus akar bilangan berupa bilangan bulat.
4. Metode Sieve of Eratosthenes
Metode Sieve of Eratosthenes adalah metode yang lebih efisien untuk mencari semua bilangan prima hingga batas yang diberikan.
Algoritma Sieve of Eratosthenes:
- Buatlah sebuah array atau list berukuran n, di mana n adalah batas yang ditentukan.
- Inisialisasi semua elemen array dengan nilai true, menandakan bahwa semua bilangan pada awalnya dianggap sebagai bilangan prima.
- Ubah nilai array di index 0 dan 1 menjadi false, karena 0 dan 1 bukan prima.
- Mulailah dengan bilangan pertama, yaitu 2, dan tandai semua kelipatan 2 sebagai non-prima dengan mengubah nilainya menjadi false.
- Lanjutkan ke bilangan berikutnya yang belum ditandai (bilangan prima), yaitu 3, dan tandai semua kelipatan 3 sebagai non-prima.
- Lakukan proses ini untuk semua bilangan prima berikutnya yang belum ditandai, hingga mencapai akar kuadrat dari n.
- Setelah itu, semua bilangan yang masih memiliki nilai true di array adalah bilangan prima.
Metode Sieve of Eratosthenes lebih efisien daripada metode Brute Force karena hanya melakukan pengujian pada bilangan-bilangan yang relevan. Metode Sieve of Eratosthenes umumnya lebih disukai untuk mencari bilangan prima karena kinerjanya yang lebih baik.
Namun, jika Anda hanya perlu mencari satu atau beberapa bilangan prima secara acak, metode Trial Division adalah pilihan terbaik.
Program JavaScript metode Sieve of Eratosthenes:
Penjelasan:
-
Fungsi
sieveOfEratosthenes(batas)
menerima parameterbatas
yang merupakan batas atas rentang bilangan yang akan diperiksa. -
Array
primes
digunakan untuk menyimpan status keprimaan dari setiap bilangan dari 0 hingga batas. -
Nilai awal semua elemen array
primes
diatur sebagaitrue
untuk menandakan bahwa semua bilangan masih dianggap prima. -
Elemen dengan indeks 0 dan 1 diubah menjadi
false
karena bukan bilangan prima. - Iterasi dimulai dari bilangan 2 hingga akar kuadrat dari batas.
-
Jika suatu bilangan
i
masih dianggap prima, maka semua kelipatan bilangani
yang lebih besar darii * i
akan ditandai sebagai bukan prima dengan mengubah nilainya menjadifalse
. -
Setelah selesai iterasi, array
primes
akan berisi status keprimaan dari semua bilangan dalam rentang yang ditentukan. -
Selanjutnya, bilangan prima dikumpulkan dalam array
primeNumbers
dengan memeriksa nilaitrue
dalam arrayprimes
. -
Akhirnya, array
primeNumbers
berisi semua bilangan prima dalam rentang yang ditentukan, dan akan dicetak di konsol.
Contoh di atas akan mencetak bilangan prima antara 1 dan 50. Anda dapat
mengubah nilai n sesuai dengan kebutuhan Anda untuk mencari bilangan prima
dalam rentang yang berbeda.
Flowchart Menentukan Bilangan Prima dengan Metode Trial Division
Saya pilih metode Trial Division untuk dibuat flowchart dibanding Brute Force karena keduanya memiliki algoritma yang sama, namun Trial Division lebih efektif.
Berikut Flowchart Bilangan Prima Trial Division:
Unduh Master File (Buka dengan app.diagrams.net)
Flowchart Deret Bilangan Prima dengan Metode Sieve of Eratosthenes
Metode Sieve of Eratosthenes memiliki efektivitas terbaik untuk mencari deretan bilangan prima sampai batas tertentu. Untuk itu saya memilih ini untuk dibuat Flowchart Deret Bilangan Prima. Walau metode yang lain pun bisa untuk mencari deret bilangan prima.
Berikut Flowchart Mencari Deret Bilangan Prima:
Unduh Master File (Buka dengan app.diagrams.net)