Rudy Hartadi Webs beta » Tutorial » Algoritma » Cara Cepat Menentukan Bilangan Prima

Download

Visitor Tracker

Total Hits: 280514
Online: 8
Today: 85
Month: 1251
Unique: 72200

Jaldis Shop

Jaldis Shop

Rakha Styleshop

Rakha Styleshop - Toko Online Kecantikan Wanita

WhizKids

Fornext Technology

Fornext Technology - 	
Lembaga Pendidikan Teknologi & Pengembangan Diri untuk anak-anak (SD, SMP, SMA).

Kos Semarang

Kosemarang.com - Info Kost, Kontrakan, dan Homestay untuk wilayah Semarang.

Aeohost

Melekweb Institute - Panduan, Tips dan Review, yang Membuat Anda Sukses Bisnis Online.
 

Cara Cepat Menentukan Bilangan Prima

Ditulis pada Rabu, 19 Agustus 2009 00:48:49 | Dibaca sebanyak : 23880 kali

Mencari bilangan prima menurutku adalah menu wajib bagi seorang programmer newbie yang ingin mengasah kemampuan algoritmanya. Mengapa? Karena dalam algoritma bilangan prima inilah, aku dulu menyadari betapa pentingnya 'setiap detik' dalam proses eksekusi program. Hehehe. Dalam artikel ini, kita akan membahas beberapa teknik-teknik algoritma untuk menentukan apakah suatu bilangan termasuk dalam bilangan prima atau bukan, beserta optimasi coding yang bisa dilakukan.

Definisi bilangan prima adalah bilangan yang lebih besar dari satu dan hanya mempunyai dua faktor, yaitu angka satu dan dirinya sendiri. Dari definisi ini, kita dapat menentukan apakah suatu bilangan termasuk bilangan prima atau bukan, dengan cara mencari faktor bilangan tersebut selain angka satu dan dirinya sendiri. Bila bilangan tersebut tidak mempunyai faktor selain satu dan dirinya sendiri, maka bilangan itu prima. Mudah ya!?

Diagram Flowchart Menentukan Bilangan Prima

Diagram Flowchart Menentukan Bilangan Prima

Sieve of Erathosenes

Sebelum memulai koding, alangkah baiknya kita membahas suatu teknik yang konon lebih cepat dan efisien untuk menentukan bilangan prima. Yaitu dengan menggunakan algoritma Sieve of Erathosenes. Namun, dalam artikel ini, kita tidak akan membahas implementasi kodenya. Mengapa? Karena, implementasi kodenya mau tidak mau harus bersinggungan dengan array, maka tidak cocok untuk programmer gadungan seperti diriku. Xixixi. Tapi tak usah kuatir, aku akan membahas sedikit konsepnya, yah berhubung aku masih seorang pg, maka akan kubahas sebisaku. Maaf kalau ada yang salah.

Misal kita akan mencari bilangan prima antara 1-100, maka langkah pertama adalah kita mencatat angka 1-100, misal kita menggunakan kertas. Karena angka 1 tidak memenuhi definisi bilangan prima, maka kita coret angka tersebut. Kemudian, angka berikutnya, yaitu angka 2, akan dianggap sebagai bilangan prima. Selanjutnya, kita coret semua kelipatan dari angka 2 ini, yaitu 4, 6, 8, 10, hingga angka 100, karena pasti bukan bilangan prima.

Kemudian, bilangan berikutnya setelah angka 2, yang belum tercoret, yaitu angka 3, pasti bilangan prima. Seperti langkah sebelumnya, coret semua kelipatan dari 3. Begitu seterusnya, sehingga pada akhirnya akan terdapat 25 bilangan yang belum tercoret. Dan bilangan-bilangan itulah bilangan prima pada range 1-100.

Kembali ke Laptop

Seperti yang sudah kita bahas sebelumnya, untuk menentukan bilangan prima, maka kita cukup mencari faktor lain dari bilangan tersebut, selain angka satu dan bilangan tersebut. Untuk mencari faktor suatu bilangan x, algoritma yang umum digunakan adalah dengan membrute-force dari 1 hingga x/2. Berikut contoh script dalam javascript untuk menentukan bilangan prima dengan cara mencari faktor-faktor dari suatu bilangan x.

function CekPrima(x){
	if(x==1) return false;
	if(x==2 || x==3) return true;
	else
		//brute force sampai x/2
		for(var i=2; i <= Math.ceil(x/2); i++)
			if(x%i == 0)
				return false;
	return true;
}

Fungsi dalam javascript di atas adalah algoritma yang sering kutemui di dalam buku-buku pemrograman. Baik itu dalam bahasa C, C++, PHP, Pascal, Delphi, VB, VB.NET, JAVA, dlsb. Padahal coding di atas masih bisa dioptimasi. Entah mengapa para penulis buku pemrograman masih menggunakan algoritma di atas. Mungkin karena konteks bukunya adalah buku pemrograman bagi orang yang ingin belajar pemrograman dari nol, sehingga tidak ingin terlalu njlimet. Kalau buku algoritma mungkin lain ceritanya kali ya? Tau ah gelap.

Nah, sebenarnya, untuk menentukan bilangan prima, kita cukup me-brute force hingga akar dari bilangan tersebut. Kalau mencari faktor, mau tidak mau memang kita harus me-brute force hingga x/2, namun kalau cuman untuk mencari bilangan prima, kita cukup looping hingga akar x. Kok bisa? Seperti yang kukatakan di awal, dalam pemrograman, setiap detik (ehem, bahkan tiap milidetik) begitu berharga. Silakan dicorat-coret di kertas, mengapa kok cukup sampai akar x, hihihi. Berikut fungsi yang lebih baik daripada fungsi sebelumnya.

function CekPrima(x){
	if(x==1) return false;
	if(x==2 || x==3) return true;
	else
		//brute force sampai sqrt(x)
		for(var i=2; I <= Math.ceil(Math.sqrt(x)); i++)
			if(x%i == 0)
				return false;
	return true;
}

Mungkinkah dioptimasi lagi? Hmm, masih bisa. Misal kita ingin menentukan bilangan pada range 1-100, apakah prima atau bukan, sebenarnya kita cukup melakukan operasi mod sebanyak 4 kali, yaitu x mod 2, x mod 3, x mod 5, dan x mod 7. Misal untuk menentukan bilangan 97, kalau pakai cara sebelumnya, kita harus melakukan looping operasi mod sampai 10 kali. Padahal sebenarnya cuman butuh 4 kali. Berikut contoh implementasinya.

function CekPrima(x){
	//untuk x = 1-100
	if(x==1) return false;
	if(x==2 || x==3 || x==5 || x==7) return true;
	if(x%2==0) return false;
	if(x%3==0) return false;
	if(x%5==0) return false;
	if(x%7==0) return false;
	if(x<100) return true;
	//untuk x lebih dari 100
	for(var i=8; I <= Math.ceil(Math.sqrt(x)); i++)
		if(x%i == 0)
			return false;
	return true;
}

Fungsi di atas memerlukan pengecekan operasi mod hingga 4 kali, untuk x <= 100. Untuk x > 100, maka kita akan menggunakan cara sqrt yang telah kita bahas sebelumnya. Kekurangan dari algoritma ini adalah kita harus menentukan batas bilangan prima yang akan digunakan untuk operasi mod untuk range bilangan tertentu. Misal kalau range 1-100, maka batasnya 7, sedang kalau range 1-100000 batasnya adalah 313. Jadi, bisa dibilang cara mix ini merupakan algoritma yang tidak murni lagi. Karena angka-angka prima yang digunakan sebagai batas sudah diketahui. Hehehe.

Namun, dari algoritma inilah, aku mengambil pelajaran berharga dalam dunia pemrograman, bahwa coding yang lebih panjang belum tentu akan menjadi lebih lambat, serta begitu berharganya waktu yang digunakan untuk satu kali looping. Thanks to Mr Rudi Kurniadi, pak dosen Struktur Data di STMIK ProVisi Semarang, yang telah memberikan pencerahan.

Manakah Algoritma yang Lebih Efisien?

Silakan lakukan percobaan berikut. Masukkan angka di dalam textbox, trus klik salah satu tombol yang ada. Group 3 tombol pertama berfungsi untuk menentukan bilangan dalam textbox itu prima atau bukan, sedang group 3 tombol berikutnya untuk mencari jumlah bilangan prima yang terdapat dari range 1-x, di mana x adalah angka di dalam textbox. Tombol dengan label 'Cara mix' mengimplementasikan cara ke-3 (yang kita bahas paling akhir), 'Cara bruteforce sqrt(x)' mengimplementasikan cara ke-2, sedang 'Cara bruteforce x/2' untuk cara ke-1.


Menentukan Bilangan Prima:

Mencari Jumlah Bilangan Prima dalam Range

Untuk lebih memudahkan dalam melakukan percobaan, silakan masukkan angka 99991, 999983, 1234567891, kemudian klik group tombol pertama. Dari hasil percobaanku (semoga hasilnya sama d:), dapat kusimpulkan, bahwa cara mix dan cara sqrt(x) cukup seimbang. Kadang cara mix lebih cepat, kadang cara sqrt(x) lebih unggul. Sedang cara x/2, pasti sudah tahu perbedaannya kan?

Nah, selanjutnya, kita akan mencari jumlah bilangan prima dalam range 1-x. Berdasarkan pengujian yang kulakukan di sahabat sejatiku, yaitu komputer berotak pentium III, dapat kusimpulkan bahwa cara mix jauh lebih unggul dibanding kedua cara lainnya. Silakan masukkan angka 1000-100000. Dan klik tombol-tombol yang ada di group ke-2.

Bagaimana? Apakah hasilnya sama? Bila iya, maka dapat kita simpulkan, jika ingin menentukan suatu bilangan adalah prima atau bukan, lebih efisien bila menggunakan cara sqrt(x), sedang bila ingin mencari jumlah bilangan prima dalam range tertentu, kita dapat menggunakan cara mix. Dalam percobaan ini, batas bilangan prima untuk pengecekan pada cara mix adalah 313, atau sampai range 100000.

Lain waktu, insya Allah kita akan membahas tentang Sieve of Erathosenes, yang jauh lebih murni daripada cara mix ini. Hehe. Mengapa Sieve of Erathosenes? Karena teknik Sieve of Erathosenes ini konon juga lebih optimal untuk mencari jumlah bilangan prima dalam suatu range, namun tidak bijak jika hanya untuk menentukan satu bilangan prima saja.

Semoga bermanfaat. Tetap dalam perdjoeangan!! Happy Coding!!

Komentar untuk artikel ini

almer reyhan pada Senin, 7 September 2009 15:15:57
ini lumayan bagus unyuk saya yg sangat kurang bisa bilangan prima anak anak saya minta diajarkan kebetulan saya menemukan ini akhirnya saya tau terima ksh ya
rudy-pg pada Rabu, 9 September 2009 21:31:56
terima kasih pak almer.
henny pada Kamis, 10 September 2009 08:08:06
Minta tolong dong bil. Prima yg lebih dari 2 faktor disebut...
rudy-pg pada Kamis, 10 September 2009 09:44:09
dari berbagai literatur menyebutkan bahwa bilangan prima hanya mempunyai dua faktor,

mungkin yang dimaksud soal adalah bilangan ganjil?
Karena bilangan prima, kecuali angka 2, biasanya ganjil,
terima kasih,
fikra pada Kamis, 10 September 2009 23:21:22
hebat juga kamu bang,,,
oya, nek aplikasai ini di upgrade bisa2 jadi crack lho bang. terutama pas searching angka...
FIKRAFAHMAIHDINA FIKRAFAHMAIHDINA
ngejunk sithik yo,,, :)
rudy-pg pada Jum'at, 11 September 2009 19:43:29
ah, masak sih?
rak popo, ngejunk-o,
puas-puas ke ae rak wes,
:))
benny pada Senin, 12 Oktober 2009 16:22:43
misi kang, saya dapet tugas bikiprogram di C . disuruh menentukan suatu bilangan Genap Dan Ganjil. Terimakasih
rudy-pg pada Selasa, 13 Oktober 2009 11:11:00
tinggal dibagi dengan dua dong pak,
kalo bisa dibagi 2, berarti genap,
kalo tidak, berarti ganjil,

trus ditambah satu kali pengecekan untuk bilangan di atas 0,
kalo minus atau 0, berarti bukan.

terima kasih.
rita pada Senin, 26 Oktober 2009 12:35:46
bantuen saya dung..
saya ada tugas mencari 3 cara mencari bilangan prima
rudy-pg pada Kamis, 29 Oktober 2009 13:54:48
bisa pakai looping sampai x/2, looping sampai akar x, dan pakai Sieve of Erathosenes,

terima kasih.
sains pada Minggu, 15 Nopember 2009 04:10:55
bikin ngeheng browser tuh... klo exekusinya kelamaan
rudy-pg pada Selasa, 1 Desember 2009 14:41:21
Iya mas.
tsamrotul zakiah pada Rabu, 25 Mei 2011 05:35:38
okE!!_
adelina fortunata pada Selasa, 19 juli 2011 19:26:16
berapa hasil bilangan prima dari 50 dan 80 ?
rudy-pg pada Minggu, 28 Agustus 2011 21:41:04
Bilangan prima antara 50 dan 80 ada 7 bilangan, yaitu: 53, 59, 61, 67, 71, 73, dan 79.
Terima kasih.
dhyan pada Jum'at, 22 juli 2011 13:22:46
z hax ingn tau ajh ap definisi dri blngan ganjil,genap,N prima!!!!!!!i2 ajh kok!!!!!!N stu lg,pak rudy hartadi hebt!!!2 jempol deh dri z........thanks
rudy-pg pada Senin, 26 September 2011 02:36:09
Untuk bilangan ganjil dan genap, silakan cek artikel Cara Menentukan Bilangan Ganjil dan Genap
Terima kasih.
ronie pada Jum'at, 22 juli 2011 18:18:35
bagus sekali contohnya..
thira pada Selasa, 26 juli 2011 20:09:41
saya tidak mengerti bagaimana cara nya..tolong kasih tau ya bagaimana....!!!!
Ima Nurhalimatus Sayyidah pada Rabu, 27 juli 2011 10:51:21
Klo ada soal \'nyatakan bilangan 496 sebagai bilangan prima\',, itu gmna caranya???
rudy-pg pada Senin, 26 September 2011 02:50:25
Mohon maaf mbak ima, saya kurang paham dengan pertanyaan mbak ima. Terima kasih.
cinta pada Selasa, 9 Agustus 2011 15:31:07
tolong ajarin dong.............
yakob pada Rabu, 24 Agustus 2011 18:38:21
mohom petunjuk jumlah bilangan prima dari 10 dan 20 tks
rudy-pg pada Minggu, 28 Agustus 2011 21:00:10
Bilangan prima antara 10 - 20 adalah 4 bilangan, yaitu: 11, 13, 17, 19.
Terima kasih.
novia khairunnisa pada Kamis, 8 September 2011 13:12:33
gi mana cara ya paling gampangnya? tolong jawab ya plis.................
novia khairunnisa pada Selasa, 13 September 2011 15:15:39
jumlah bilangan prima dari 1 - 20

terima kasih
rudy-pg pada Senin, 26 September 2011 02:24:33
Ada 8 mbak novia, yaitu: 2, 3, 5, 7, 11, 13, 17, dan 19.
Terima kasih.
romanus risal pada Selasa, 13 September 2011 20:24:09
contoh dan cara menentukan bilangan ganjil dan bilangan genap
rudy-pg pada Rabu, 14 September 2011 10:55:40
Contoh dalam javascript, silakan lihat di artikel Cara Menentukan Bilangan Ganjil dan Genap.
Terima kasih.
hapsari nabila pada Selasa, 20 September 2011 18:18:43
om tlg ajarin ak dong
bilangan prima dri 0 -100
tlg di jwb skrang ya
coz.a bsk mau di kumpul
okk tks
qha pada Rabu, 30 Nopember 2011 19:39:25
misi mas ..
ajarin bilangan prima dan bilangan ganjil coding nyaa duunkk di VB.NET
aku newbie
dan masiih bingung :(
rosi pada Minggu, 8 Januari 2012 21:09:13
cara algoritma untuk menampilkan 20 data bilangan prima yang pertama gmn tolong dibantu ya pak?
rudy-pg pada Senin, 23 Januari 2012 13:16:31
Coba cek artikel Mencari Deret Bilangan Prima Menggunakan Algoritma Sieve of Eratosthenes.
Terima kasih.
crowdy pada Rabu, 11 Januari 2012 22:16:51
kang ada gak codenya yang bahasa C hehe
kalo boleh di gampangin dulu pake flowchart
sada pada Jum'at, 13 Januari 2012 15:35:40
ass. aku ada tugas kuliah nih....
flowchar untuk mencetak bilangan prima 2 sampai 13\'...
semoga dapat bermamfaat...
makasih..!!
Kirim Komentar
Nama :
Website/E-mail :
Komentar :
Sisa Karakter:
 

Recent Comments

tito: bro adnan kacamata ne apapun diliat jd terlihat ma...
yudis: harddisk drive saya kebakar atau bisa dibilang han...
Angky: ,gimana cara membuka file berformat .exe di nokia ...
aryu hanifah: mas mau tanya,, cara merubah subnet mask dari 255....
eko: aku mau nanya, boleh minta cara bikin menu bilanga...
krisna: mas.mo tanya komputer saya setiap saya shut down k...
arwan: bos...minta bantuannya dong... ceritanya ane mau k...
ghofar: met pagi pak rudi.. pak maw tanya ne... klo maw ny...
Zyus Andre: Mas mau tanya ... apa keuntungan makai DNS Cisco d...
Enggar: Bgmn cara mngaktfkan bluetooth yg terkunci / tdk b...


ping ip