Page Nav

HIDE

Grid

GRID_STYLE

Breaking News

latest

Algoritma Tercepat Mencetak Bilangan Prima

Beberapa waktu lalu, salah seorang anggota milis  phpug  bertanya mengenai bagaimana algoritma untuk mencetak bilangan prima dengan cepat. B...

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.

Sieve of Eratosthenes

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.

<?php
function bilangan_prima($limit) {
$prima = array();$prima_awal = array(2,3,5,7);for ($i=2; $i<=$limit;
$i++)$prima[$i] = true;
foreach ($prima_awal as $awal) {
for ($i=2*$awal; $i<=$limit; $i+=$awal) {
$prima[$i] = false;
}
}
foreach ($prima as $bilangan=>$status) {
if ($status) echo "$bilangan ";
}
}
$start=mktime();
bilangan_prima(1000000);
$finish=mktime();
$result=$finish-$start;
echo "<br>Time: $result seconds";
?>

Semoga bermanfaat.

Sumber - Achmatim.Net

Tidak ada komentar