Dalam matematika, bilangan prima adalah bilangan asli yang lebih besar dari angka 1, yang faktor pembaginya adalah 1
dan bilangan itu sendiri. 2 dan 3 adalah bilangan prima. 4 bukan
bilangan prima karena 4 bisa dibagi 2. Sepuluh bilangan prima yang
pertama adalah 2, 3, 5, 7, 11, 13, 17, 19, 23 dan 29. (https://id.wikipedia.org/wiki/Bilangan_prima)
Kali ini Saya share code untuk memperoleh 100 bilangan prima pertama dengan menggunakan Scilab. Ada beberapa code yang Saya tampilkan di sini, untuk membandingkan seberapa cepat dan efektif code tersebut untuk memperoleh 100 bilangan prima pertama.
code pertama:
1. Asumsi awal semua bilangan dianggap sebagai bilangan prima.
2. Kemudian bilangan tersebut dicek dengan cara dibagi dengan semua bilangan bulat sebelumnya (yang lebih kecil). Jika sisa pembagian (modulo) ada yang sama dengan nol maka bilangan tersebut bukan bilangan prima. Atau Jika sisa pembagian (modulo) tidak ada yang sama dengan nol maka bilangan tersebut adalah bilangan prima.
3. Step 1 dan 2 dilakukan berulang-ulang sampai diperoleh 100 bilangan prima.
clear
clc
tic()
i=1;
x=2;
prima(i)=x
while (i<100)
i=i+1;
x=x+1;
prima(i)=x
for j=2:(x-1)
sisa=modulo(x,j);
if(sisa==0) then
i=i-1;
break;
end
end
end
disp(prima)
disp(toc())
clc
tic()
i=1;
x=2;
prima(i)=x
while (i<100)
i=i+1;
x=x+1;
prima(i)=x
for j=2:(x-1)
sisa=modulo(x,j);
if(sisa==0) then
i=i-1;
break;
end
end
end
disp(prima)
disp(toc())
code kedua:
1. Asumsi awal semua bilangan dianggap sebagai bilangan prima.
2. Kemudian bilangan tersebut dicek dengan cara dibagi dengan semua bilangan prima sebelumnya (yang lebih kecil). Jika sisa pembagian (modulo) ada yang sama dengan nol maka bilangan tersebut bukan bilangan prima. Atau Jika sisa pembagian (modulo) tidak ada yang sama dengan nol maka bilangan tersebut adalah bilangan prima.
clear
clc
tic()
i=1;
x=2;
prima(i)=x
while (i<100)
i=i+1;
x=x+1;
prima(i)=x
for j=1:(i-1)
sisa=modulo(x,prima(j));
if(sisa==0) then
i=i-1;
break;
end
end
end
disp(prima)
disp(toc())
clc
tic()
i=1;
x=2;
prima(i)=x
while (i<100)
i=i+1;
x=x+1;
prima(i)=x
for j=1:(i-1)
sisa=modulo(x,prima(j));
if(sisa==0) then
i=i-1;
break;
end
end
end
disp(prima)
disp(toc())
code ketiga:
1. Asumsi awal semua bilangan dianggap sebagai bilangan prima.
2. Kemudian bilangan tersebut dicek dengan cara dibagi dengan semua bilangan prima sebelumnya yang nilainya maksimal setengah dari bilangan yang dicek. Jika sisa pembagian (modulo) ada yang sama dengan nol maka bilangan tersebut bukan bilangan prima. Atau Jika sisa pembagian (modulo) tidak ada yang sama dengan nol maka bilangan tersebut adalah bilangan prima.
clear
clc
tic()
i=1;
k=i;
x=2;
prima(i)=x
while (i<100)
i=i+1;
x=x+1;
if (ceil(x/2)>prima(k)) then //ceil==>pembulatan ke atas
k=k+1;
end
prima(i)=x
for j=1:k
sisa=modulo(x,prima(j));
if(sisa==0) then
i=i-1;
break;
end
end
end
disp(prima)
disp(toc())
clc
tic()
i=1;
k=i;
x=2;
prima(i)=x
while (i<100)
i=i+1;
x=x+1;
if (ceil(x/2)>prima(k)) then //ceil==>pembulatan ke atas
k=k+1;
end
prima(i)=x
for j=1:k
sisa=modulo(x,prima(j));
if(sisa==0) then
i=i-1;
break;
end
end
end
disp(prima)
disp(toc())
Hasil:
Berikut screenshot hasil 100 bilangan prima pertama yang diperoleh. (setelah di arrange dalam bentuk matriks 10x10, kalo dalam MATLAB bisa menggunakan fungsi reshape)
Hasil Running 100 bilangan prima pertama (setelah di arrange dalam matriks 10x10) |
Perbandingan konsumsi waktu untuk ketiga code tersebut: (aproximately)
code pertama: 5.878969 s
code kedua : 1.398557 s
code ketiga : 0.939001 s
Yang terakhir dibuat dalam bentuk function untuk bisa memperoleh bilangan prima ke n.
dalam bentuk function:
function [y]= bil_prima(ke)
i=1;
k=i;
x=2;
prima(i)=x
while (i<ke)
i=i+1;
x=x+1;
if (ceil(x/2)>prima(k)) then //ceil==>pembulatan ke atas
k=k+1;
end
prima(i)=x
for j=1:k
sisa=modulo(x,prima(j));
if(sisa==0) then
i=i-1;
break;
end
end
end
y=prima(ke);
endfunction
i=1;
k=i;
x=2;
prima(i)=x
while (i<ke)
i=i+1;
x=x+1;
if (ceil(x/2)>prima(k)) then //ceil==>pembulatan ke atas
k=k+1;
end
prima(i)=x
for j=1:k
sisa=modulo(x,prima(j));
if(sisa==0) then
i=i-1;
break;
end
end
end
y=prima(ke);
endfunction
cara pemanggilan function:
//cara memanggil function
clear
clc
exec('/home/muhammadpuji/Desktop/Scilab/Belajar/05_function_bil_prima.sce', -1) //mengaktifkan function bil_prima(ke)
tic()
ke=100;
y=bil_prima(ke);
disp(strcat(["Bilangan prima ke ",string(ke)," = ",string(y)],"","c"));
disp(strcat([string(toc()), " s"]));
Developed by:
Muhammad Nurul Puji
Project-G
clear
clc
exec('/home/muhammadpuji/Desktop/Scilab/Belajar/05_function_bil_prima.sce', -1) //mengaktifkan function bil_prima(ke)
tic()
ke=100;
y=bil_prima(ke);
disp(strcat(["Bilangan prima ke ",string(ke)," = ",string(y)],"","c"));
disp(strcat([string(toc()), " s"]));
Developed by:
Muhammad Nurul Puji
Project-G