// a simple LCM by brute force!
// John Sklar, CED 512 - fall, 2k   
   import java.applet.Applet;
   import java.awt.*;
   import java.awt.event.*;
   public class lcm extends Applet implements ActionListener
   {
      TextField integer1,integer2,integer3;
      Button action = new Button (" Find the LCM ");
      Label answer, Banner;
      public void init()
      {
         Font bigFont = new Font("TimesRoman", Font.ITALIC, 24);
         Font biggerFont = new Font("TimesRoman", Font.ITALIC, 30);
         Font monoFont = new Font("Courier", Font.BOLD, 24);
      
         integer1 = new TextField(6);
         integer2 = new TextField(6);
         integer3 = new TextField(6);
      
         Banner = new Label ("Enter some integers");
         answer = new Label("                                                ");
      
         action.setFont(monoFont);
         answer.setFont(biggerFont);
         Banner.setFont(bigFont);
         integer1.setFont(monoFont);
         integer2.setFont(monoFont);
         integer3.setFont(monoFont);
         add (Banner);
         add (integer1);
         add (integer2);
         add (integer3);
         add (action);
         add (answer);
         action.addActionListener(this);         
         setBackground(Color.white);
      }
      public void actionPerformed (ActionEvent e)
      {
         boolean thirdnumber=true;
         int i;       
         if (action.getLabel()==" Find the LCM ")
         {
            int lcm,q,accumulator=0;
            int[] number = new int[3];
            int[][] primes = new int[2][1000];
            try 
            {
               number[0]=Integer.parseInt(integer1.getText());
            }
               catch(Exception error)
               {
                  accumulator++;
                  number[0]=1;
               } 
            try 
            {
               number[1]=Integer.parseInt(integer2.getText());
            }
               catch(Exception error)
               {
                  accumulator++;
                  number[1]=1;
               }
            try 
            {
               number[2]=Integer.parseInt(integer3.getText());
            }
               catch(Exception error)
               {
                  accumulator++;
                  number[2]=1;
               }
            if(accumulator<2){
               do{
                  lcm=1;
                  q=2;
                  for(int l = 0;l < 2; ++l)// clean up primes-+
                     for(int m = 0 ;m < 1000; ++m)
                        primes[l][m]=0;
                  if(thirdnumber==true && number[1]==number[2])
                     thirdnumber=false;
                  if(number[0]*number[1]==0)
                     lcm = 0;
                  else
                  {     
                     for(i=0;i<2;++i){
                        do{  
                           if(number[i]%q==0){
                              primes[i][q]++;
                              number[i] /= q;
                           }
                           else{
                              ++q;
                           }
                        }while(q<=Math.sqrt(number[i]));
                        primes[i][number[i]]++;
                        q=2; // reset q
                     }
                  // compare the factors
                     for(i = 2; i <  primes[0].length;++i)
                        if(primes[0][i]+primes[1][i]>0) // there are factors
                           if(primes[0][i] >= primes[1][i])
                              lcm *= Math.pow(i,primes[0][i]);
                           else
                              lcm *= Math.pow(i,primes[1][i]);   
                  }// end of the zero trap
                  if(thirdnumber==true){
                     number[0]=lcm;
                     number[1]=number[2];
                  }
               }while(thirdnumber==true);
               answer.setText ("LCM is "  + lcm); 
            }
            else
               answer.setText ("Enter two integers");
            action.setLabel(" Clear ");
            integer1.setEnabled(false);// no typing now
            integer2.setEnabled(false);// no typing now
            integer3.setEnabled(false);// no typing now
         }
         else{ 
            Banner.setText ("Enter some integers");
            integer1.setText("");
            integer2.setText("");
            integer3.setText("");
            answer.setText ("                                           ");
            action.setLabel(" Find the LCM ");
            integer1.setEnabled(true);// ok, you can type
            integer2.setEnabled(true);// ok, you can type
            integer3.setEnabled(true);// ok, you can type
         }
      }
   }