Wilbert’s WebBlog

Java, Oracle, Serta Aktivitasku

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.. :)

29-March-2008 - Posted by wilbertliu | Java | | 16 Comments

16 Comments »

  1. duh gag ngerti..
    kalo masukin 9 itu prima bukan ya?
    bukannya harusnya di modulo i bukan 2?

    ~sorry kalo saya sotoy

    Comment by randu | 6-April-2008 | Reply

  2. Kalo angka 9 jelas bukang prima dunkz…
    dicoba aja programnya!!

    santai aja, sama2 belajar koq!

    Comment by wilbertliu | 6-April-2008 | Reply

  3. 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..

    Comment by tenzai | 7-April-2008 | Reply

  4. yup…,pas ngantuk2 tuh nulis codingnya… hehehe, cuman mengganti 2 dengan variable i koq, sekarang bisa dicoba…

    Comment by wilbertliu | 7-April-2008 | Reply

  5. 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..

    Comment by Aris Kumara | 7-April-2008 | Reply

  6. Hohoho, thanks banget bro…. jadi lebih asik lagi kalo dikasih break yah, ga memakan CPU time yang lebih banyak…
    thanks yoooo!!

    Comment by wilbertliu | 8-April-2008 | Reply

  7. # public Prima()
    # {
    # this(1);
    # }

    Konstruktor yang (pertama) ini fungsinya sebagai apa ya? Bukankah dengan hanya memakai konstruktor yang kedua sudah cukup? Mohon penjelasannya.

    Comment by bunga | 1-May-2008 | Reply

  8. 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… :)

    Comment by wilbertliu | 1-May-2008 | Reply

  9. Ohh… gitu ya. Thanks banget, melalui tanya-2 kayak gini konsep-2 tersebut lebih nyangkut diotak saya. Jangan bosen ngejawab ya?

    Comment by bunga | 2-May-2008 | Reply

  10. Tenang aja.., saya cek blog terus koq.. Kalau memang ada yang perlu dijawab ya saya jawab.. :D
    Dan jangan sungkan untuk bertanya yah.. hehehe!

    Comment by wilbertliu | 2-May-2008 | Reply

  11. 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;
    }

    Comment by Timotius Sakti | 2-July-2008 | Reply

  12. waw… baru mau jawab tapi udah di jawab ma timo dlu :P

    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 :D 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 :D

    Comment by Felix J | 1-September-2008 | Reply

  13. uhm, bukannya lebih cepet kalo diprecompute sieve ya :P

    -Kurniady

    Comment by Kurniady | 6-September-2008 | Reply

  14. Ampun kk.., ampun…
    3 kk di atasku, minta ampun deh…. :D

    Comment by wilbertliu | 6-September-2008 | Reply

  15. 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.

    Comment by bennybroZ | 12-September-2008 | Reply

  16. thankz..

    Comment by Herman | 6-November-2008 | Reply


Leave a comment