Algorithma FPB dan KPK dengan Javascript


Melihat antusias pengunjung terhadap artikel yang berjudul "Algorithma Java Mencari KPK dan FPB", oleh karena itu penulis mencoba mengimplementasikan algorithma pencaharian FPB (Faktor Persekutuan Terbesar) dan KPK (Kelipatan Persekutuan Terkecil) dalam bentuk yang lebih mudah untuk dicoba, yaitu menggunakan bahasa pemrograman Javascript.

Memang karena Javascript termasuk dalam bahasa pemrograman yang disuguhkan dengan interface yang mudah dipahami, implementasi algorithma mencari FPB dan KPK yang sebelumnya ditulis menggunakan bahasa Java, dapat penulis tulis ulang dengan syntax yang jauh lebih pendek.

Diharapkan dengan kode program versi Javascript ini, pembaca dapat langsung mencobanya, dengan menjalankannya di web browser.

Cukup dengan menuliskan bilangan-bilangan yang akan dicari nilai FPB dan KPK di form input, memisahkannya dengan tanda koma, dan menekan tombol submit, kode program akan menghitung mulai dengan menurunkan ke faktor-faktornya terlebih dahulu.

Berikut ini adalah kode program Javascript mencari FPB dan KPK di atas.

<html> 
<head> 
<title>Algorithma FPB dan KPK</title> 
</head> 
<body> 
<div><input type="text" name="angka" id="inputa" value="24,42"/><input type="submit" value="Submit" onclick="Masukkan()"/></div> 
<div id="hasil" style="margin-top:10px;"></div> 
<script> 
 
class Angka 
{ 
 constructor(a) 
 { 
  this.value=a; 
  this.number=[]; 
  this.pangkat=[]; 

  var prime=2,j=0; 
  while(a>=2){ 
   if(a%prime==0){ 
    a/=prime; 
    if(j==0 || (j>0 && this.number[j-1]!=prime)){ 
     this.number[j]=prime; 
     this.pangkat[j]=1; 
     j++; 
    }else{ 
     this.pangkat[j-1]++; 
    } 
   }else{ 
    prime=nextPrime(prime); 
   } 
  } 
 } 
} 
 
function nextPrime(a) 
{ 
 var ketemu=false; 
 var i=a+1; 
 while(!ketemu){ 
  ketemu=true; 
  for(j=2;j<i;j++){ 
   if(i%j==0){ 
    ketemu=false; 
    break; 
   } 
  } 
  if(ketemu)return i; 
  i++; 
 } 
} 
 
function Masukkan() 
{ 
 var text=document.getElementById("inputa").value; 
 var nangka=text.split(","); 
 var Bilangan=[]; 
 for(i=0;i<nangka.length;i++){ 
  Bilangan[i]=new Angka(Number(nangka[i])); 
 } 

 var maxjum=0,idmax=0; 
 document.getElementById("hasil").innerHTML=""; 
 for(i=0;i<Bilangan.length;i++){ 
  var pesan=Bilangan[i].value+" = "; 
  if(Bilangan[i].number.length>maxjum){ 
   maxjum=Bilangan[i].number.length; 
   idmax=i; 
  } 
  for(j=0;j<Bilangan[i].number.length;j++){ 
   if(j>0)pesan+="x"; 
   pesan+=Bilangan[i].number[j]; 
   if(Bilangan[i].pangkat[j]>1)pesan+="<sup>"+Bilangan[i].pangkat[j]+"</sup>"; 
  } 
  document.getElementById("hasil").innerHTML+=pesan+"<br/>"; 
 } 

 var nkpk=[],nfpb=[]; 
 for(i=0;i<Bilangan.length;i++){ 
  for(j=0;j<Bilangan[i].number.length;j++){ 
   var ada=false; 
   for(k=0;k<nkpk.length/2;k++){ 
    if(nkpk[2*k+0]==Bilangan[i].number[j]){ 
     ada=true; 
     if(Bilangan[i].pangkat[j]>nkpk[2*k+1])nkpk[2*k+1]=Bilangan[i].pangkat[j]; 
     break; 
    } 
   } 
   if(!ada){ 
    nkpk[nkpk.length]=Bilangan[i].number[j]; 
    nkpk[nkpk.length]=Bilangan[i].pangkat[j]; 
   } 
  } 
 } 

 for(j=0;j<Bilangan[idmax].number.length;j++){ 
  var jum=1,p=Bilangan[idmax].pangkat[j]; 
  for(i=0;i<Bilangan.length;i++){ 
   if(idmax!=i){ 
    for(k=0;k<Bilangan[i].number.length;k++) 
    if(Bilangan[idmax].number[j]==Bilangan[i].number[k]){ 
     if(Bilangan[i].pangkat[j]<p)p=Bilangan[i].pangkat[j]; 
     jum++; 
     break; 
    } 
   } 
  } 
  if(jum==Bilangan.length){ 
   nfpb[nfpb.length]=Bilangan[idmax].number[j]; 
   nfpb[nfpb.length]=p; 
  } 
 } 

 var KPK=1; 
 var FPB=1; 

 var kata="KPK : "; 
 for(i=0;i<nkpk.length/2;i++){ 
  if(i>0)kata+="x"; 
  kata+=nkpk[2*i+0]; 
  if(nkpk[2*i+1]>1)kata+="<sup>"+nkpk[2*i+1]+"</sup>"; 
  KPK*=Math.pow(nkpk[2*i+0],nkpk[2*i+1]); 
 } 
 document.getElementById("hasil").innerHTML+=kata+" = "+KPK+"<br/>"; 

 var kata="FPB : "; 
 for(i=0;i<nfpb.length/2;i++){ 
  if(i>0)kata+="x"; 
  kata+=nfpb[2*i+0]; 
  if(nfpb[2*i+1]>1)kata+="<sup>"+nfpb[2*i+1]+"</sup>"; 
  FPB*=Math.pow(nfpb[2*i+0],nfpb[2*i+1]); 
 } 
 document.getElementById("hasil").innerHTML+=kata+" = "+FPB; 
} 
 
</script> 
</body> 
</html> 

Komentar

  1. error untuk bilangan 40, 150 serta kelipatannya 40m, 150n

    BalasHapus
    Balasan
    1. Maaf, saya mencobanya lagi tidak ada error:

      40 = 23x5
      150 = 2x3x52
      KPK : 23x52x3 = 600
      FPB : 2x52 = 50

      Hapus

Posting Komentar



Postingan populer dari blog ini

Kumpulan Source Code Greenfoot

Algorithma Coretan Abstrak dengan HTML5 Canvas

Game TicTacToe dengan Greenfoot

Honeycomb Style Wallpaper dengan HTML5 Canvas

Cara Membuat Halaman HTML Sederhana

Kode Greenfoot Game Snake Sederhana

Melihat Alamat Berbentuk QR Code di Undangan Pernikahan

Algoritma Tombol Putar dengan Greenfoot

Tips Agar Website Anda Segera di Terima oleh Google Adsense dan di-Monetize

Selamatan Latar Glundengan Bubuk Banyuwangi