Showing posts with label gcd. Show all posts
Showing posts with label gcd. Show all posts
Friday, February 10, 2017
GCD of two nubers
GCD of two nubers
I written three different methods to calculate GCD of two numbers
Method 1:
#!/bin/bash
#*******************************************************************************************
# gcd.sh: greatest common divisor uses Eclidean algorithm
# Usage : gcd.sh number1 number2
# The algorithm used to calculate the GCD between two integers is known as the Euclidean
# algorithm(Recursive method).
#*******************************************************************************************
#----------------------------------------------------------------------
# Argument check
ARGS=2
BADARGS=65
if [ $# -ne "$ARGS" ]
then
echo ; echo "Invalid Arguments"
echo "Usage: $0 first-number second-number" ; echo
exit $BADARGS
fi
# Check supplied arguments are integers are not
isnumber()
{
if [ $1 -eq $1 2> /dev/null ]
then
:
# : is a null command.This is the shell equivalent of a "NOP"(do nothing)
else
echo -e " You supplied one bad argument "$1" is not a number"
echo -e "Usage: $0 first-number second-number "
exit $BADARGS
fi
}
isnumber $1
isnumber $2
# ---------------------------------------------------------------------
function Euclidean()
{
if [ $2 -eq 0 ]
then
return $1
else
Euclidean $2 $(($1%$2))
# calling function recursively
fi
}
Euclidean $1 $2
echo "gcd of $1 and $2 is $?"
# $? returns the exit status of script. This is one method to capture return value of a function
exit 0
Method 2:
#!/bin/bash
# gcd2.sh
# Usage: gcd2.sh number1 number2
# For argument check see method 1
gcd ()
{
dividend=$1
divisor=$2
# Arbitrary assignment.
#! It doesnt matter which of the two is larger.
remainder=1
# If uninitialized variable used in loop,it results in an error message
# on the first pass through loop.
if [ $divisor -eq 0 ]
then
echo "GCD of $dividend and $divisor = $dividend"
exit 0
fi
until [ "$remainder" -eq 0 ]
do
let "remainder = $dividend % $divisor"
# Now repeat with 2 smallest numbers
dividend=$divisor .
divisor=$remainder
done
}
# Last $dividend is the gcd.
gcd $1 $2
echo; echo "GCD of $1 and $2 = $dividend"; echo
exit 0
Method 3:
#!/bin/bash
# gcd3.sh
# Usage: gcd3.sh
# This script doesnt use command line arguments.You should to enter two numbers when asking
echo enter two numbers
read n1 n2
remainder=1
# Preserve numbers for future use
t1=$n1
t2=$n2
if [ $n2 -eq 0 ]
then
echo "GCD of $n1 and $n2 = $n1"
exit 0
fi
while [ $remainder -ne 0 ]
do
remainder=`expr $n1 % $n2`
# or use
#remainder=$((n1%n2))
n1=$n2
n2=$remainder
done
echo "GCD of $t1 , $t2 is $n1"
Available link for download
Tuesday, February 7, 2017
GCD of more than two numbers
GCD of more than two numbers
#!/bin/bash
#**********************************************************************************************
# gcd.sh: greatest common divisor uses Eclidean algorithm
# Usage : gcd.sh num1 num2 num3 .... (any number of arguments)
# The algorithm used to calculate the GCD two integers is known as the Euclidean algorithm.
# Based on Euclidean algorithm this script is written(Recursive method).
# For checking supplied arguments are integers or not check GCD of two numbers code
#***********************************************************************************************
# Argument check
# Minimum 2 arguments you should to supply
ARGS=2
BADARGS=65
if [ $# -lt "$ARGS" ]
then
echo
echo "Invalid Arguments"
echo "Usage: $0 first-number second-number"
echo
exit $BADARGS
fi
# Preserve command line argument for future use
cmdargs=$*
function Euclidean()
{
if [ $2 -eq 0 ]
then
return $1
else
Euclidean $2 $(($1%$2)) # calling function recursively
fi
}
Euclidean $1 $2
return=$?
# $? returns the exit status of script. This is one method to capture return value of a function
shift
# Shifts command line arguments one step.Now $1 holds second argument
while true
do
shift
# shift is used to pick up next command line argument to continue iteration
# $# holds total number of arguments.At every shift operation its value decreases one
if [ $# -eq 0 ]
then
break 2
fi
Euclidean $return $1
return=$?
done
echo "GCD of $cmdargs is $return"
exit 0
Available link for download
Subscribe to:
Posts (Atom)