1. Bilangan Prima
Seperti dijelaskan sebelumnya , bilangan prima atau sering disebut Primary number adalah bilangan lebih dari 1 dan hanya mempunyai 2 faktor pembagi yaitu 1 dan dirinya sendiri. perhatikan ilustrasi berikut
2 3 5
/ \ / \ / \ ...................dst ( ingat syratnya : 1 dan dirinya sendiri)
1 2 1 3 1 5
Dalam logika program, setiap bilangan harus dievaluasi semua kemungkinan faktor pembaginya.
2 3 4 5
/ \ / | \ / / \ \ / / | \ \ .................dst
1 2 1 2 3 1 2 3 4 1 2 3 4 5
ini bisa di kode sbb :
int prima(int n){
int i,j;
for(i=1;i<=n;++i){
printf("Angka %d \n",i);
printf("=========\n");
int counter = 0;
for(j=1;j<=i;++j){
if(i % j==0){
++counter;
}
}
/*bil prima tepat punya 2 buah faktor
yaitu 1 dan dirinya sendiri*/
if(counter==2)
printf("Bil %d Prima",i);
printf("\n");
}
}
Namun kode diatas tidak maksimal, bayangkan jika angka yg akan di test besar....seperti ilustasi diatas, kita harus satu-satu check dengan pembagi nya. Banyak cara untuk mempercepat menentukan bil Prima misal dengan men-Cek apakah bilangan tersebut genap atau tidak . Karena jika ia genap (kecuali angka 2 , karena 2 = satu-satu nya angka genap yg masuk bilangan prima) sudah pasti ia bukan prima. Silahkan coba-coba. Sekarang kita akan pakai cara lain yaitu dengan cara Test dengan Faktor pembagi antara 1 sampai Akar dari angka tersebut dibulatkan :
2 <= m <= ceil(akar n) , dimana m adalah faktor pembagi dan n adalah bil yg mau di test.
int prima(int n){
int i,j;
for(i=2;i<=n;++i){
int flag = 0;
if(i % 2 !=0 ){
//cek dari 3 saja, krena 1 sdh pasti faktor pembaginya
for(j=3;j<=(int)ceil(sqrt(i));++j){
/*check apakah i habis dibagi j,
jika ya maka flag++ artinya bkn prima*/
if(i % j ==0){
flag++;
}
}
}else{
if(i!=2)
flag++;
}
if(flag==0){
printf("Bil %d = prima \n",i);
}
}
}
Agak sedikit rumit tpi cukup membantu untuk angka yang besar, mungkin kamu bisa improve kode nya masing-masing.
2. Faktorial
Faktorial memenuhi rumus atau aturan seperti berikut :
Jika n = 6 , maka n faktorial (n!) = n x (n-1)! , atau lengkapnya = 6 x 5 x 4 x 3 x 2 x 1
int faktorial(int n){
int i;
int hasil=1; //penampung sementara
for(i=n;i>=1;--i){
hasil =hasil * i;
}
printf("Faktorial %d! = %d \n",n,hasil);
}
2. Fibonaci
Fibonaci adalah bilangan dimana bilangan yang di sedang amati adalah hasil penjumlahan dari dua buah bilangan sebelumnya
misal : 1 1 2 dua adalah bilangan yg sedang kita amati adalah hasil penjumlahan dua buah bilangan sebelumnya. Fibonaci akan membentuk sebuah deret bilangan ( deret fibonaci).
ada beberapa cara untuk mencari fibonaci , diantaranya adalah :
a. Fungsi rekursif , yang memenuhi formula berikut
Dimana n adalah bilangan fibonaci digit ke-n
Dengan formula rekursif diatas akan membentuk pola perhitungan sbb :
Jika bilangan itu > 1
F(2) = F(2-1) + F(2-2)
= F(1) + F(0)
= 1 + 0 = 1 //substitusi kedalam fungsi rumus
Begitu seterusnya secara rekursif. Namun secara rekursif kurang disenangi karena memakan banyak memory di Komputer.
b. Cara Logika biasa dan Matematika
b.1 Logika Biasa
int fibonaci(int n){
int i,next,a=0,b=1;
for(i=0;i
if(i<=1){
next = i;
}else{
next = a + b;
a = b;
b= next;
}
printf("%d ",next);
}
}
b.2 Cara matematika
Yang memenuhi formula Fn = (x1n – x2n) / akar(5) dengan pembulatan kebawah
dimana X1 dan X2 adalah akar-akar dari persamaan Kuadrat x2 - x - 1=0
Untuk mencari X1 dan X2 dapat dicari dengan
Maka didapat X1,X2 =>
DI program kita buat seperti ini
int fibonaci(int n){
int i;float tmp;
//x^2 - x - 1 =0
float x1 = ( 1 + sqrt(5) ) / 2;
float x2 = (1 - sqrt(5) ) / 2;
for(i=0;i
tmp = (pow(x1,i) - pow(x2,i)) / sqrt(5);
printf("%d ",(int)floor(tmp)); //pembulatan kebawah
}
printf("\n");
}
Begitulah kira-kira :D
Untuk memanggil fungsi-fungsi diatas :
#include
#include
//fungsi-fungsinya.......
int main(){
//fibonaci(5); //panggil disini.......
return 0;
}
Jalankan dicompiler, jika anda di linux dan tidak ada compiler tapi sudah install GCC, jalankan di terminal :
ubuntu@AcerXtimeline:~/Contoh_C$ gcc -o bilangan bilangan.c -lm
ubuntu@AcerXtimeline:~/Contoh_C$ ./bilangan
NOTES : Selain cara-cara diatas tentunya masih banyak cara lain, silahkan coba sendiri :D
Happy Coding !!!