Tuesday, February 2, 2010

Mengecek Bilangan Prima dengan Bahasa C

Bilangan prima adalah bilangan yang hanya bisa habis dibagi 1 dan bilangan itu sendiri. Tidak terlalu sulit untuk mencarinya jika bilangan tersebut tidak terlalu besar. Kita bisa saja dengan mudah memastikan kalau bilangan 5, 7, 13, atau 17 adalah bilangan prima, karena bilangan-bilangan tersebut hanya bisa habis dibagi 1 dan bilangan itu sendiri. Tapi bagaimana kita bisa mengecek 983, 2234, 776, atau 1335 adalah bilangan prima atau bukan? Nah, puyeng kan? :) Terlalu sulit untuk mengeceknya dengan membagi bilangan-bilangan tadi dengan bilangan-bilangan sebelumnya. Nah, inilah permasalahannya. Lantas penyelesaiannya gimana? Tentu saja kita akan pecahkan masalah ini dengan pemrograman bahasa c (sesuai judul euy!). Emang bisa cuma dengan program sederhana dari bahasa c? Absolutely! Kalo enggak, ngapain aku bikin tulisan ini? :P

Sebelum kita memprogram, mari kita pelajari algoritmanya terlebih dahulu. Dalam pembuatan program ini, kerja kita akan dipermudah dengan adanya operasi matematika modulus (sisa pembagian). Untuk mengekspresikan operasi modulus dalam bahasa c kita akan menggunakan "%" tanpa tanda petik. Langsung saja lihat operasi modulus pada angka bilangan prima dan bukan prima berikut:

angka: 3 (prima)

3 mod 1 = 0
3 mod 2 = 1
3 mod 3 = 0

angka: 4 (bukan prima)

4 mod 1 = 0
4 mod 2 = 0
4 mod 3 = 1
4 mod 4 = 0

angka: 5 (prima)

5 mod 1 = 0
5 mod 2 = 1
5 mod 3 = 2
5 mod 4 = 1
5 mod 5 = 0

angka: 6 (bukan prima)

6 mod 1 = 0
6 mod 2 = 0
6 mod 3 = 0
6 mod 4 = 2
6 mod 5 = 1
6 mod 6 = 0

Nah, coba amati baik-baik operasi di atas. Sudahkah kamu melihat perbedaannya? Operasi di atas merupakan modulus dari suatu angka dengan angka real sebelumnya. Perbedaannya, angka prima menghasilkan angka 0 HANYA DUA KALI. Yap, dari sini kuharap kamu sudah mulai mendapat gambaran dalam pembuatan program kita nanti.

Ehm, penjelasan sederhananya seperti ini. Dalam program kita nanti kita akan memodulus suatu angka yang dicek dengan angka-angka real sebelum angka tersebut. Lalu di sini kita kondisikan, jika operasi tersebut mendapatkan nilai 0 sebanyak dua kali, maka angka tersebut bisa dipastikan prima. Dan jika mendapat nilai 0 sebanyak bukan dua (tidak bingung kan? Maksudnya bisa satu kali atau lebih dari dua kali), maka angka tersebut bukan prima.

Haha, that's easy, right? Let's write the source!
/*============= start here =============*/

#include<stdio.h>

void main(void){
int bil,i,j,cek;

scanf("%d",&bil);

for(i=1;i<=bil;i++){
cek=0;
for(j=1;j<=bil;j++){
if(i%j==0){
cek++;
}
}
}
if(cek==2){
printf("prima");
}else{
printf("bukan prima");
}
}

/*============== end here ==============*/
Lihat kode diatas! Di situ aku menggunakan nested loop (perulangan bersarang) untuk mempermudah mengecek bilangan tersebut. Nested loop akan melakukan operasi modulus sebanyak yang kita butuhkan untuk pengecekan. if(i%j==0) dimaksudkan untuk melakukan operasi modulus dan melakukan pengkondisian apakah mendapatkan hasil 0 atau bukan. Jika iya, maka variabel cek akan ditambah 1. if(cek==2) digunakan untuk pengkondisian jika variabel cek berjumlah 2, maka program akan mencetak tulisan prima. Hmm, pekerjaan mengecek angka prima yang membutuhkan waktu begitu lama, kini bisa kita kerjakan hanya dengan waktu sekian detik saja. Nice! Inilah salah satu alasan mengapa aku menyukai dunia IT khususnya dalam programming. :)

3 comment(s):

tama said...

hmmm... ini yang aku cari...

pengen belajar lebih di C :)

Unknown said...

kita msh sama2 belajar. makasih komennya.. :)

Anonymous said...

boolean isPrima(int n) {
bool prima = true;
if ( n < 2) return false;
else if (n == 2 || n == 3) return true;

else if ( n % 2 == 0) return false;
else {
for (int i = 5; i*i <= n; i += 2) {
if (n%i == 0) prima = false;
}
return prima;
}
}

Post a Comment

feel free to write your comment here.. :)