My first Magazine pemrograman-kompetitif-dasar | Page 24
2 Matematika Diskret Dasar
Sieve of Eratosthenes
Terdapat solusi yang lebih cepat untuk membangkitkan bilangan prima, yaitu saringan
Eratosthenes, atau Sieve of Eratosthenes. Ide utama utama dari algoritma ini adalah mengeli-
minasi bilangan-bilangan dari calon bilangan prima, yaitu bilangan komposit.
Kita tahu bahwa suatu bilangan komposit c dapat dinyatakan sebagai c = p × q, dengan p
suatu bilangan prima. Seandainya kita mengetahui suatu bilangan prima, kita dapat mengeliminasi
kelipatan-kelipatan bilangan tersebut dari calon bilangan prima.
Contoh: jika diketahui 7 adalah bilangan prima, maka 14, 21, 28, ... dieliminasi dari calon
bilangan prima.
Berikut prosedur dari Sieve of Eratosthenes:
1. Awalnya seluruh bilangan bulat dari 2 hingga N belum dieliminasi.
2. Lakukan iterasi dari 2 hingga N:
a) Jika bilangan ini belum dieliminasi, artinya bilangan ini merupakan bilangan prima.
b) Lakukan iterasi untuk mengeliminasi kelipatan bilangan tersebut.
Algoritma 6 menunjukkan implementasi Sieve of Eratosthenes. Untuk mengimplementasikan-
nya, kita dapat menggunakan array boolean untuk menyimpan informasi apakah suatu bilangan
telah tereliminasi. Untuk mencari bilangan prima yang ≤ N, diperlukan memori sebesar O(N).
Untuk kompleksitas waktu, perhitungan matematis 7 membuktikan bahwa solusi bekerja dalam
O(N log (log N)).
Algoritma 6 Sieve of Eratosthenes
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function SIEVE O F E RATOSTHENES (N)
eleminated ← new boolean[N + 1]
FILL A RRAY (eleminated, f alse)
primeList ← {}
for i ← 2, N do
if not eleminated[i] then
primeList ← primeList ∪ {i}
j ← i × i
while j ≤ n do
eleminated[ j] ← true
j ← j + i
end while
end if
end for
return primeList
end function
. Siapkan array boolean eleminated
. Isi seluruh elemen eleminated dengan f alse
Perhatikan baris ke-8 yang berisi j = i × i. Di sini, j menyatakan kelipatan i yang akan
dieliminasi. Perhatikan bahwa j dimulai dari i × i, bukan 2i. Alasannya adalah 2i, 3i, 4i, ..., (i − 1)i
pasti sudah tereliminasi pada iterasi-iterasi sebelumnya.
14