What is LCM? | Maths Explanation for Perl Kids
                        Akin to finding H.C.F., L.C.M. is commonly found by repeated factorization.
                        Only this time, the factors do not have to be common amongst the set of numbers.
                        
                        If we have the set of numbers 8, 12 and 
                        18 for example, their L.C.M. is found thus:
                    
Hence, L.C.M. of 8, 12 and 18 = 2 X 2 X 2 x 3 x 3 = 72
Step-by-Step Guide to L.C.M. by Factorisation in Perl
We shall follow the steps below in writing our Perl LCM code.
Step 1:
Do a numerical reverse sort on the (resulting) set so its first member is the largest in the set.
Step 2:
Starting with 2, iteratively check through the set of numbers for individual factors.
Step 3:
For each individual factor, divide affected member(s) of the number set by the factor.
Step 4:
Repeat the above steps recursively until there are no more individual factors.
                        Create a new Perl class file; File, New File.
                        Call it FindLCM.pm
                        Type out the adjoining Perl code for finding Lowest Common Multiple (L.C.M.)
                    
Note: You can comment out the Perl code for the main class from the previous lesson if you have been following.
So! Perl Fun Practice Exercise - Find LCM
As a fun practice exercise, feel free to try out your own numbers, and see how the Perl code finds the LCM of those numbers.
Perl Code for Find LCM - Module File.
BEGIN {
require Exporter;
# for the sake of standard
our $VERSION = 2016.12;
# Inherit from exporter to export functions and variables
our @ISA = qw(Exporter);
# Functions and variables to be exported by default
our @EXPORT_OK = qw(getLCM);
}
use warnings;
use strict;
my ($index, $state_check, $calc_result);
my (@set_of_numbers, @arg_copy, @all_factors);
# simulate an object construct
# takes one arguments -- besides its name;
# array reference of values whose LCM is sought
sub new {
no warnings "all";
my $this = shift;
my $parameters = {@_};
bless $parameters, $this;
$this->_init(@_);
return $this;
}
# Simulate a constructor
sub _init {
my $self = shift;
my $tmp = shift;
@set_of_numbers = @{$tmp};
@all_factors = ();
# Sort array in descending order
@set_of_numbers = sort {$b <=> $a} @set_of_numbers;
$index = 2;
$state_check = 0;
$calc_result = 1;
}
sub findLCMFactors {
# Copy 'set_of_numbers' into 'arg_copy'
@arg_copy = @set_of_numbers;
# STEP 1:
# sort in descending order
@arg_copy = sort {$b <=> $a} @arg_copy;
while ($index <= $arg_copy[0]) {
$state_check = 0;
for (0 .. $#set_of_numbers) {
if (($set_of_numbers[$_] % $index) == 0) {
# STEP 3:
$set_of_numbers[$_] /= $index;
push @all_factors, $index if !$state_check;
$state_check = 1;
}
}
# STEP 4:
return findLCMFactors() if $state_check;
$index++;
}
return;
}
# Returns an array reference of the desired set of even numbers
sub getLCM {
# STEP 2:
$index = 2;
findLCMFactors();
# iterate through and retrieve members
for (@all_factors) {
$calc_result *= $_;
}
return $calc_result;
}
1;
Perl Code for Find LCM - Main Class.
use strict;
use warnings;
use LCM;
# Useful variables
my $answer;
my @set;
# Use the LCM module/class
@set = (2, 3, 4);
my $lcm = LCM->new(\@set);
$answer = $lcm->getLCM();
print ("The L.C.M. of ", join(", ", @set), " is $answer\n");