[Algorithm] Prime Test (Uji Bilangan Prima)

Categories: Programming | April 30th, 2008 | by Felix J | 6 Comments |

Kenalkah anda dengan bilangan yang disebut dengan bilangan “Prima” ?? Saya yakin anda mengetahui dan mengenal apa itu bilangan “Prima”

Apa itu bilangan “Prima”? Sebuah bilangan bisa dikatakan bilangan “Prima” apabila bilangan tersebut hanya dapat di bagi oleh bilangan itu sendiri dan angka ‘1′…. contohna kita ambil contoh saja dengan bilangan ‘5′.. mari kita liat bilangan ‘5′ apakah prima atau tidak… (Nb: Pengecekan dimulai dari angka 2)

5 % 2 = 1
5 % 3 = 2
5 % 4 = 1
5 % 5 = 0

Sekarang, terbukti bahwa angka 5 adalah bilangan prima karena hanya habis dibagi oleh angka itu sendiri… bagi yang mendalami komputer, pasti akan tau tanda ‘%’ itu adalah ‘modulo’ (sisa pembagian)

Ok, enough with the introduction… sebenarnya Prime Test Algorithm ini sebenarnya bisa kita implementasikan dengan berbagai cara. Salah satunya adalah cara ‘naif’ (naive) yang meng-loop dari angka 2 (bahkan ada yang memulai dari angka 1. No problem) sampai angka itu sendiri, dan jika sebelum angka itu sudah terdapat angka yang habis dibagi, maka itu bukan bilangan prima. contohnya adalah dengan kode seperti ini :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
 
int main()
{
	int n,flag=1;
	scanf("%d", &n);
 
	for (int i=2; i<n; i++)
	{
		if (n%i==0)
		{
			printf("Bukan Prima\n");
			flag = 0;
			break;
		}
	}
	if (flag) printf("Prima\n");
 
	return 0;
}

yah… cara diatas sangat naif… langsung tembak. dan pasti benar… :) *hanya jika bilangan2 kecil… :P* bagaimana jika input saya berikan menjadi di atas jutaan? saya yakin dengan algoritma diatas, hasil yang akan keluar pasti sangat lambat…

Bagaimana cara mengoptimisasi cara pengecekan tersebut? Baiklah, kita mulai dari berbagai ‘properties’ bilangan prima itu sendiri… yang dapat kita simpulkan dari sebuah bilangan prima adalah sebagai berikut :

  1. Bilangan Prima adalah Bilangan Ganjil kecuali angka ‘2′
  2. Angka 2 adalah Bilangan Prima
  3. Angka 1 adalah bukan Bilangan Prima

Setelah melihat di atas, maka dapat kita buat kode untuk mengecek bilangan itu lebih efisien lg menjadi seperti ini :

1
2
3
4
5
6
7
8
9
10
11
12
13
int is_prime(int n)
{
	if (n==1) return 0;
	if (n==2) return 1;
	if (n%2==0) return 0;
 
	for (int i=3; i<n; i+=2)
	{
		if (n%i==0)
			return 0;
	}
	return 1;
}

Sampai disini, ternyata algoritma ini sudah cukup cepat… tapi tetap saja kurang cepat untuk berbagai bilangan diatas jutaan… bagaimana kita mengoptimisasinya lagi? jawabannya adalah kita hanya mengecek hanya sampai pada akar dari bilangan tersebut… mengapa demikian? karena angka yang melebihi akar dari bilangan tersebut sudah pasti tidak akan dapat membagi bilangan tersebut… *untuk yang satu ini, silahkan anda buktikan sendiri :)*

dengan begitu, kita dapat memperbaharui kode tersebut menjadi :

1
2
3
4
5
6
7
8
9
10
11
12
13
int is_prime(int n)
{
	if (n==1) return 0;
	if (n==2) return 1;
	if (n%2==0) return 0;
 
	for (int i=3; (i*i) <= n; i+=2)
	{
		if (n%i==0)
			return 0;
	}
	return 1;
}

bisa kita liat disitu ada (i*i) yang dimaksud dengan ini adalah akarnya. Misal 25, maka akarnya adalah 5, dengan dijalankan kode diatas, terlihat i*i = 25… jadi statement diatas hanya merupakan restatement dari sqrt(n) saja. bedanya, disini tidak melibatkan floating number… :)

*Updated*
Karena kesalahan saya yang melupakan bahwa kode diatas dapat overflow jika n mencapai batas integer, maka dengan update ini, saya akan mengupdate kode diatas sehingga jika terdapat n yang sampai ke batas integer pun tidak masalah. Kode dibawah ini saya tambahkan karena diingatkan oleh Bp. Suhendry. *Terima Kasih om Shu…*

1
2
3
4
5
6
7
8
9
10
11
12
int is_prime(int n)
{
	if (n==1) return 0;
	if (n==2) return 1;
	if (n%2==0) return 0;
 
	for (int i=3; i <= n/i; i+=2)
	{
		if (n%i==0)
			return 0;
	}
	return 1;

Kode diatas ini, akan lebih lambat. Karena yang seperti Bp. Suhendry bilang bahwa cost operasi pembagian lebih besar dari perkalian.

dengan kode terakhir yang diatas, anda dapat melakukan pengujian bilangan prima lebih cepat 25x dari kode naif semula..

Akhir kata, semoga tutorial ini bermanfaat untuk anda. :) *Kritik dan Saran dipersilahkan.. :)*

- Felix J

kavo.exe - a deadly virus….

Categories: Curhat | January 14th, 2008 | by Felix J | 7 Comments |

ok, gw mulai aja yah… kemarin itu setelah gw buka laptop yang gde yang slama ini di pake sementara adek gw untuk main DOMO, gw menemukan suatu kejanggalan yang sangat berarti… yaitu jika gw buka drive C: atau drive D: itu akan di buka pada separate windows…

udah gitu, karna ada files yang gw hidden mau gw tongolin balik, gw bermaksud merubah dari “Don’t Show Hidden Files and Folders” menjadi “Show hidden files and folders”… tapi setiap kali gw klik “ok”, dan gw cek lg ternyata balik lagi ke “don’t show hidden files and folders”.

dengan tau kejanggalan seperti itu, gw akhirnya memutuskan untuk mengeluarkan product “Norton Internet Security 2008″ yang udah gw beli tapi masih belum gw install…. tapi mau taukah kalian apa hasilnya?

Pages: 1 2

Go To Singapore !!

Categories: Berita | December 28th, 2007 | by Felix J | No Comments |

hari ini gw pergi ke spore bareng keluarga besar gw dan juga tmen2 tante gw…. ke singaporenya sih agak dadakan… mendadak kmrn nyokap bilang kita berangkat hari ini…  soalnya sebelumnya kan kita mestinya berangkat besok…. akhirnya kmrn cpet2an siap2in barang2 dhe… udah gitu, ada pemilihan RW lagi… terpaksa dhe harus ikutin tuh pemilihan RW… hehehehe…

seharian ini, hun2 murung… takut gk gw kabarinn… tapi hun, papi pasti kabarin hun2 kok… tenang aja… hehehehe…

ok dhee… Ciaooo… Happy Holiday all…

Merry X-Mas !!

Categories: Berita | December 25th, 2007 | by Felix J | No Comments |

…Jingle Bells, Jingle Bells
Jingle All The Way
Oh.. How Fun It’s To Ride
In a One-Horse Open Sleigh…

Bagi Kita, keknya gak asing lagi yah mendengar nyanyian di atas? nyanyian yang udah di nyanyiin dari dluw ampe skrg dan masih tetap terkenal… :) karena ini Tanggal 25 Desember, maka gw beserta istri gw ingin mengucapkan

“MERRY CHRISTMAS 2007 & HAPPY NEW YEAR 2008″

untuk semua orang yang merayakan maupun tidak…. :) Hope The Joy of Christmas Be With Us…

Menyambut Natal & Tahun baru..

Categories: Berita | December 24th, 2007 | by Felix J | No Comments |

Dalam rangka menyambut natal dan tahun baru, maka Blog ini pun gw ganti temanya menjadi tema natal agar menghormati teman-teman kita yang akan merayakan natal (termasuk istrikuw sih :P ) hehehe….

Semoga Kalian yang mengunjungi Blog gw ma istri gw, menikmati kunjungin kalian di blog gw ma istri gw…

Thanks…

Visit My GrandFather

Categories: Curhat | December 23rd, 2007 | by Felix J | No Comments |

Huwaaaa… Udah hampir seminggu keknya akong gw masuk RS… pas pertama kali masuk, itu karna sesak… dan langsung di tempatin ke ICU… akhirnya, setelah 2 hari, akong di pindahin ke kamar biasa… tapi karena kadang-kadang masih agak sesak, makanya masih di RS…

Hari ini gw mau kunjungin akong gw lg setelah pas itu gw yang jaga. kata akong sih pas hari rabu ato kamis gitu di telp, akong udah baikan… tapi katanya tadi sesak lg :( huhuhu…

doain akong gw cepet sembuh yah? :)

Balik ke IM

Categories: Curhat | December 21st, 2007 | by Felix J | No Comments |

Huwaaaaa…. hari ini hun2kuw balik ke IM T_T huhuhuhu….

kangennn dia disiniiii… rasanya pengen ajak dia jalan teruss… cman yah karena hun2 lagi di IM, mana bisa ku ajak jalan… huhuhu T_T…

*Cpetan Balik ke Jakarta ya Hun… Mwahhh….*

Ketemuann Jugaaaa…

Categories: Cerita | December 20th, 2007 | by Felix J | No Comments |

Akhirnya hari ini, hari yang kita tunggu tunggu dateng juga…. mau tau ini hari apa?? ini hari pernikahan kita yang ke-7 bulan…

Continue Reading »

BNPCHS 2007 Final

Categories: Cerita, Programming | December 17th, 2007 | by Felix J | No Comments |

Akhirnyaaaa…. dateng juga itu tanggal penting !! tanggal dimana gw ikut BNPCHS 2007 Final Round.. Hehehe…

Well, Ceritanya Begini… ehem ehemm…. Hehehehe…

Continue Reading »

Pages: 1 2 3

BNPCHS 2007 Qualification

Categories: Cerita, Programming | December 16th, 2007 | by Felix J | 2 Comments |

Huhhh… mau mulai darimana yah :) hehehe…

ok dhe, skarang gw mulai cerita aja d.. pas itu tepatnya tanggal 11 November 2007, hari minggu di pagi hari yang cerah.. gw bangun dari tidur gw jam 9an gitu.. buat siapin mental trus juga buat siap2in bahan biar nantinya kalo perlu apa gitu, jadi cepet.. mulai gw buka website2 algo yang biasa gw kunjungin trus abis itu gw catet smua computation complexity dari berbagai algoritma. karena gw tau ini pasti salah satu soal populer… jadi gw siapin dluw in case needed hehehehe…

Continue Reading »

Pages: 1 2

« Newer Posts


Chase The Limit is powered by WordPress.
Theme designed by Web Hosting Geeks
Sponsored by FDHosting.com - Fast Dependable Hosting and Cheap TFT Monitors