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

Apps Script untuk Cetak Sertifikat

Kumpulan Source Code Greenfoot

Menyembunyikan Failed Load Images di Blogger

Kode Greenfoot Game Flappy Bird

Algorithma Coretan Abstrak dengan HTML5 Canvas

Kebodohan Karyawan Menyalahkan Sistem

Algorithma Bilangan Prima dengan Javascript

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Mencoba Submit Theme di Wordpress.org

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script