0% found this document useful (0 votes)
3K views4 pages

Shell Script To Find Prime Factors of A Number

This document describes a shell script that finds the prime factors of a positive integer. The script takes a number as input, checks that it is a valid positive integer, then uses functions to determine if each potential factor is prime and divides the original number without remainder. If a prime factor is found, it is printed and the number is divided by that factor to continue searching for additional prime factors. The script handles large numbers efficiently and can find prime factors of numbers with many digits in seconds or minutes depending on the specific number. Examples of running the script on different inputs are provided.

Uploaded by

kvsrvzm
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3K views4 pages

Shell Script To Find Prime Factors of A Number

This document describes a shell script that finds the prime factors of a positive integer. The script takes a number as input, checks that it is a valid positive integer, then uses functions to determine if each potential factor is prime and divides the original number without remainder. If a prime factor is found, it is printed and the number is divided by that factor to continue searching for additional prime factors. The script handles large numbers efficiently and can find prime factors of numbers with many digits in seconds or minutes depending on the specific number. Examples of running the script on different inputs are provided.

Uploaded by

kvsrvzm
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

Shell Script to Find Prime Factors of a Number

In number theory, the prime factors of a positive integer are the


prime numbers that divide that integer exactly, without leaving a
remainder. The process of finding these numbers is called integer
factorization, or prime factorization.
The fundamental theorem of arithmetic says that every positive
integer has a unique prime factorization.
Example:
The prime factors of 330 are 2, 3, 5 and 11:
330 = 2 3 5 11
There is no other possible set of prime numbers that can be
multiplied to make 330.
You can find prime factors of a number using UNIX/Linux utility
factor. This is a very convenient and cool UNIX command.
Here is its syntax:
$ factor
330: 2 3
$ factor
2121977:

330
5 11
2121977
11 11 13 19 71

Many Algorithms have been devised for determining the Prime factors
of a given number. They vary quite a bit in sophistication and
complexity. It is very difficult to build a general-purpose
algorithm for this computationally "hard" problem, so any additional
information which is known about the number in question or its
factors can often be used to save a large amount of time.
Here I am providing a shell script to find prime factors of a
positive integer. This script does most factorizations within a
second. In the worst case scenario (for some large semi-primes with

more than 6-digit factors) factorization will take a couple of


minutes to hours.
#!/bin/bash
# SCRIPT: primefactors.sh
# USAGE : primefactors.sh <Positive Integer>
# PURPOSE: Produces prime factors of a given number.
#
####################################################################
#
Arguments Checking
####################################################################
if [ $# -ne 1 ]
then
echo "Usage: scriptname <Positive Integer>"
exit 1
fi
expr $1 + 1 &>/dev/null
if [ $? -ne 0 ]
then
echo "Sorry, You supplied non numerical value"
exit 1
fi
[ $1 -lt 2 ] && echo "Values < 2 are not prime numbers" && exit 1
num=$1
####################################################################
#
Functions
####################################################################
# To know how to find prime number check bellow link:
# Shell script to find prime number
# Bellow function finds supplied argument is a prime or not.
primenumber()
{
primenum=$1
for ((counter2=2;$((counter2*counter2))<=$primenum;counter2++))
do
if [ $((primenum%counter2)) -eq 0 ]
then
return 1
fi
done
return 0
}
primefind()
{
# It's good to check that the number it self is a prime or not
before going to
# find prime factors of a number. Comment out bellow line and supply
a prime
# number or semi-prime, you will find the difference.
# Ex: primefactors.sh 2121979
primenumber $1 && echo "$1" && exit 0
for ((counter1=$2;counter1<=$1;counter1++))
do

primenumber $counter1 && factorcheck $1 $counter1 && break


done
}
factorcheck()
{
prime=$2
newnum=$1
remainder=$((newnum%prime))
if [ $remainder -eq 0 ]
then
printf "%dx" $prime
newnum=$((newnum/prime))
primefind $newnum 2
return
else
let prime++
primefind $newnum $prime
fi
}
####################################################################
#
Main
####################################################################
echo -n "Prime Factors of $1:
primefind $num 2
printf "\b \n"
# \b is used for removing last x.
OUTPUT:
[root@venu ]# sh primefactors.sh
Usage: scriptname <positive integer="">
[root@venu ]# sh primefactors.sh 21219797
Prime Factors of 21219797: 101x210097
[root@venu ]# sh primefactors.sh 212197
Prime Factors of 212197: 443x479
Running time of script doesn't depend on number,it depends on number
of factors,
more factors less time and less factors more time.
[root@venu ]# time sh primefactors.sh 9999999999999999
Prime Factors of 9999999999999999: 3x3x11x17x73x101x137x5882353
real
user
sys

0m1.345s
0m1.225s
0m0.091s

[root@venu ]# time sh primefactors.sh 999999999995


Prime Factors of 999999999995: 5x251x1831x435179
real
user
sys

1m32.105s
1m28.866s
0m3.192s

[root@venu ]# time sh primefactors.sh 99999999000000000

Prime Factors of 99999999000000000:


2x2x2x2x2x2x2x2x2x3x3x5x5x5x5x5x5x5x5x5x11x7
3x101x137
real
user
sys

0m0.543s
0m0.508s
0m0.035s

You might also like