Algoritma Keputusan Bilangan Prima (Versi Saya)
Kemarin dan khususnya hari ini, banyak sekali anak-anak mahasiswa saya yang bertanya, bagaimana algoritma bilangan prima.. Jujur saja buat mereka, bilangan prima adalah suatu bilangan yang mereka takuti, apalagi dalam penyelesaian algoritma untuk memutuskan suatu bilangan termasuk prima atau bukan..
Karena hal itulah saya berinisiatif menulis coding sedikit di sini tentang algoritma sederhana yang saya buat, dan anda bisa memodifikasinya sesuai dengan kebutuhan anda, atau mungkin kalau anda punya algoritma yang lebih baik lagi, anda bisa memberikan komentar di bawah post ini…
Langsung saja yah, saya tidak akan menerangkan tentang classpath, karena asumsi saya, anda sudah menguasai package.. Kalau belum, cukup hilangkan statement package bla bla bla di code yang nanti akan saya tulis.. Pertama, buat kelas seperti di bawah ini :
package prototype;
public class Prima
{
private int angkaUser;
public Prima()
{
this(1);
}
public Prima(int angkaUser)
{
this.angkaUser = angkaUser;
}
public void setAngkaUser(int angkaUser)
{
this.angkaUser = angkaUser;
}
public int getAngkaUser()
{
return(this.angkaUser);
}
public boolean isPrima()
{
int counter = 0;
for(int i = 1; i < this.angkaUser; i++)
if(this.angkaUser % i == 0)
counter++;
if(counter > 1 || counter == 0)
return false;
else
return true;
}
}
Di dalam kelas Prima lah algoritma untuk memutuskan bilangan prima atau bukan dituliskan, yaitu di method isPrima(). Langkah yang kedua adalah, buatlah kelas seperti di bawah ini :
package implementasi;
import prototype.Prima;
public class Impl
{
public static void main(String[] args)
{
Prima p = new Prima(12);
if(p.isPrima())
System.out.println("Bilangan \"" + p.getAngkaUser() +
"\" adalah bilangan prima");
else
System.out.println("Bilangan \"" + p.getAngkaUser() +
"\" adalah bilangan bukan prima");
}
}
Setelah menulis code di atas dan menyimpannya dalam suatu direktori, anda siap untuk melakukan proses kompilasi dan eksekusi… Silahkan dilakukan dan hasilnya, anda lihat sendiri.. Coba lakukan penelitian juga terhadap instansiasi di atas..
Semoga post saya ini menjawab sebagian besar pertanyaan mahasiswa, dan juga reader semua yang membaca blog saya, dan mungkin kebetulan mempunyai masalah yang sama dalam sektor ini..
Jangan pernah berhenti mencoba, karena sewaktu kita berhenti mencoba, saat itulah kita sedang akan dikalahkan oleh waktu..

















duh gag ngerti..
kalo masukin 9 itu prima bukan ya?
bukannya harusnya di modulo i bukan 2?
~sorry kalo saya sotoy
Kalo angka 9 jelas bukang prima dunkz…
dicoba aja programnya!!
santai aja, sama2 belajar koq!
Maaf, saya kebetulan orang awam yang kebetulan mampir. Emang bilangan prima cuma dimodulo ama 2 ya ? Harusnya kan modulo 2, 3, 5, 7…(gak terbatas).
Kalo saya masukkan 3,5,7,13..kok hasilnya bukan bilangan prima ya ? Salah deh kayaknya algoritmanya mas..
yup…,pas ngantuk2 tuh nulis codingnya… hehehe, cuman mengganti 2 dengan variable i koq, sekarang bisa dicoba…
Sip2…sory nih iseng banget abis udah lama aku ga coding nih jadi suka liat codingannya orang =). Mau kasih ide aja mas..mungkin untuk enhancement, biar lebih efektif, kasih tambah code di if(this.angkaUser % i == 0), kalo udah true, mending langsung break dan kasih flag prima=false. Contoh extreme misal kita masukin angka 100000, looping untuk for(int i = 1; i < this.angkaUser; i++) ga perlu looping sampe i=100000 juga buat tau itu bukan prima kan? Kan saat i=2 udah ketahuan dia bukan prima. Itung2 hemat resource..Hehehe..
Hohoho, thanks banget bro…. jadi lebih asik lagi kalo dikasih break yah, ga memakan CPU time yang lebih banyak…
thanks yoooo!!
# public Prima()
# {
# this(1);
# }
Konstruktor yang (pertama) ini fungsinya sebagai apa ya? Bukankah dengan hanya memakai konstruktor yang kedua sudah cukup? Mohon penjelasannya.
Kan kadang kala kita bisa menginstan dengan tidak memberikan argumen apa2 ke parameter konstruktornya..
Nah, saya pengen, kalau pas usernya menginstan dengan cara seperti itu, saya mengeset nilai bilangan prima yang ingin dicari adalah 1…
Ohh… gitu ya. Thanks banget, melalui tanya-2 kayak gini konsep-2 tersebut lebih nyangkut diotak saya. Jangan bosen ngejawab ya?
Tenang aja.., saya cek blog terus koq.. Kalau memang ada yang perlu dijawab ya saya jawab..
Dan jangan sungkan untuk bertanya yah.. hehehe!
Menurutku algoritmanya kurang efisien (no offense) ^^.
Aku merekomendasikan yang seperti ini:
public boolean isPrima()
{
if(this.angkaUser<2)
return false;
if(this.angkaUser%2==0 && this.angkaUser!=2)
return false;
for(int p=3;p*p<=this.angkaUser;p+=2)
if(this.angkaUser%p==0)
return false;
return true;
}
waw… baru mau jawab tapi udah di jawab ma timo dlu
algo di atas kurang efisien… dan sebaiknya diganti dengan algo yang lebih efisien yang Timo berikan…
penjelasannya mungkin bs di lihat di blog saya… untuk kasus bilangan prima ini saya pernah membuat artikelnya…
yang penting pada bilangan prima, angka genap selain 2 dipastikan bukan prima, jd kita hanya tinggal loop dari angka ganjil
dan loop tentu saja bermula dari 3 sampe sqrt nya saja…
setelah itu, kalo ada yang membagi di return false saja lsg… tdk usah sampe abis di hitungnya
uhm, bukannya lebih cepet kalo diprecompute sieve ya
-Kurniady
Ampun kk.., ampun…
3 kk di atasku, minta ampun deh….
mas, kayaknya mencari faktor enggak perlu semua angka di-modulo-kan. cukup dari 2 sampai setengah dari angka yang dicek. Enggak mungkin kalo 7 adalah faktor dari 9. Fungsi isPrima() kayaknya perlu di-tweak lagi. n Aku lebih setuju fungsi isPrima() milik mas Timo.
thankz..