Anda di halaman 1dari 3

ALGORITMA TERCEPAT MENCETAK

BILANGAN PRIMA
March 28, 2008 Achmad Solichin PHP, Umum 21 comments

Beberapa waktu lalu, salah seorang anggota milis phpug bertanya mengenai


bagaimana algoritma untuk mencetak bilangan prima dengan cepat. Bilangan
prima yang diminta bukan hanya sampai 100 atau 1000, tapi sampai 100juta.

Setelah mencari di Google, ternyata saya menemukan salah satu algoritma


klasik untuk mencetak bilangan prima. Algoritma tersebut disebut
sebagai Sieve of Eratosthenes, saya temukan di Wikipedia. Mungkin ini
bukan algoritma yang tercepat, tapi setidaknya sudah cukup cepat dibanding
jika menggunakan modulus.

Berikut ini algoritma tersebut yang dikutip dari Wikipedia.

Misalkan kita hendak menemukan semua bilangan prima di antara 1 sampai


suatu bilangan bulat n.

1. Tulis semua bilangan, mulai dari 1 sampai n. Misalkan ini adalah daftar
A.
2. Buat suatu daftar yang masih kosong, sebut saja daftar B.
3. Coret bilangan 1 dari daftar A.
4. Lalu tulis 2 pada daftar B. Lalu coret 2 dan semua kelipatannya dari
daftar A
5. Bilangan pertama yang belum tercoret dari daftar A (misalnya 3) adalah
bilangan prima. Tulis bilangan ini di daftar B, lalu coret bilangan ini dan semua
kelipatannya dari daftar A.
6. Ulangi langkah 4 sampai semua bilangan di daftar A sudah tercoret.

Setelah selesai, semua bilangan di daftar B adalah bilangan prima.

Dan berikut ini contoh penerapan algoritma di atas dalam bahasa


pemrograman PHP. Script ini sudah ditest untuk menampilkan bilangan prima
dibawah 1.000.000 dan berhasil menampilkannya dalam waktu 3 detik.

Code block      

1. <?php
2.  
3. function bilangan_prima($limit) {
4. $prima = array();
5. $prima_awal = array(2,3,5,7);
6.  
7. for ($i=2; $i<=$limit; $i++)
8. $prima[$i] = true;
9.  
10. foreach ($prima_awal as $awal) {
11. for ($i=2*$awal; $i<=$limit; $i+=$awal) {
12. $prima[$i] = false;
13. }
14. }
15.  
16. foreach ($prima as $bilangan=>$status) {
17. if ($status) echo "$bilangan ";
18. }
19. }
20. $start=mktime();
21.  
22. bilangan_prima(1000000);
23.  
24. $finish=mktime();
25. $result=$finish-$start;
26. echo "<br>Time: $result seconds";
27.  
28. ?>

Semoga bermanfaat
http://achmatim.net/2008/03/28/algoritma-tercepat-mencetak-bilangan-prima/

Anda mungkin juga menyukai