Senin, 27 Maret 2017

Bilangan Prima (SCILAB)

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())



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.

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=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.

3. Step 1 dan 2 dilakukan berulang-ulang sampai diperoleh 100 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())
 

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



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











Tidak ada komentar:

Posting Komentar

Selamat berinovasi :D Salam berbagi..

Cara mengetahui ip address raspberry atau perangkat lain yg terhubung pada wifi yg sama

1. Install nmap [jika belum ada]: sudo apt install nmap 2. Cek ip address komputer (yg akses ke wifi yang sama): ip addr misal hasilnya 192....