Science Fair Projects Ideas - Prime factorization algorithm

All Science Fair Projects

      

Science Fair Project Encyclopedia for Schools!

  Search    Browse    Forum  Coach    Links    Editor    Help    Tell-a-Friend    Encyclopedia    Dictionary     

Science Fair Project Encyclopedia

For information on any area of science that interests you,
enter a keyword (eg. scientific method, molecule, cloud, carbohydrate etc.).
Or else, you can start by choosing any of the categories below.

Prime factorization algorithm

A prime factorization algorithm is any algorithm (a step-by-step process) by which an integer (whole number) is "decomposed" into a product of factors that are prime numbers. The fundamental theorem of arithmetic guarantees that this decomposition is unique.

Contents

A simple factorization algorithm

Description

We can describe a recursive algorithm to perform such factorizations: given a number n

  • if n is prime, this is the factorization, so stop here.
  • if n is composite, divide n by the first prime p1. If it divides cleanly, recurse with the value n/p1. Add p1 to the list of factors obtained for n/p1 to get a factorization for n. If it does not divide cleanly, divide n by the next prime p2, and so on.

Note that we need to test only primes pi such that pi  ≤  √n.

Example

Suppose we wish to factorize the number 9438.
9438/2 = 4719 with a remainder of 0, so 2 is a factor. We repeat the algorithm with 4719.
4719/2 = 2359 with a remainder of 1, so 2 is NOT a factor.
4719/3 = 1573 with a remainder of 0, so 3 is a factor. We repeat the algorithm with 1573.
The first prime number which 1573 is divisible by is the prime number 11.
1573/11 = 143 with a remainder of 0, so 11 is a factor. We repeat the algorithm with 143.
Similarly 11 is the first prime number which 143 is divisible by.
143/11 = 13 with a remainder of 0, so 11 is a factor. We repeat the algorithm with 13.
13/13 = 1 with a remainder of 0, so 13 is a factor. We stop when we reached 1.

Thus working from top to bottom, we have 9438 = 2*3*11*11*13

Code

Here is the code in Python for finding the factors of numbers less than 2147483647:

from math import sqrt
def factorize(n):
    def isPrime(n):
        return not [x for x in xrange(2,int(sqrt(n))+1)
                    if n%x == 0]
    primes = []
    candidates = xrange(2,n+1)
    candidate = 2
    while not primes and candidate in candidates:
        if n%candidate == 0 and isPrime(candidate):
            primes = primes + [candidate] + factorize(n/candidate)
        candidate += 1            
    return primes
print factorize(int(sys.argv[1]))

output:

python factorize.py 9438
[2, 3, 11, 11, 13]

Here is a more complex code in Python for finding the factors of any arbitrarily large number:

import sys

ListOfPrimes=[2,3,5,7,11,13,17,19]
maxindex=len(ListOfPrimes)
maxprimeinlist=ListOfPrimes[-1]

# Put Primes in a dictionary
DictPrime={}
DictPrime.fromkeys(ListOfPrimes,True)

def intsqrt(n):
  """ Return the integer square root of a long number """
  def intsqrt_core(digitpair,remainder,results):
    # function intsqrt_core returns (results,remainder)
    if digitpair<100:
      currvalue=remainder*100 + digitpair
      for d in range(9,-1,-1):
        x=(2*10*results + d)*d
        if x <= currvalue:
          remainder= currvalue - x
          results=results*10 + d
          return(results,remainder)
    else:
      (results,remainder)=intsqrt_core(digitpair//100,remainder,results)
      (results,remainder)=intsqrt_core(digitpair%100,remainder,results)
      return(results,remainder)
  (results,remainder)=intsqrt_core(n,0,0)
  return results

def isPrime(n):
  """ Return True if n is a prime """
  if DictPrime.has_key(n):
    return True
  high=intsqrt(n)
  for x in ListOfPrimes:
    if x <= high and n%x == 0:
      return False
    if x >= high:
      return True
  x=maxprimeinlist + 2
  while x<=high:
    if n%x == 0:
      return False
    x += 2
  return True

def factorize(n):
  """ Factorize a integer number """
  primes = []
  index=0
  candidate = ListOfPrimes[index]
  while not primes and candidate <= n:
    if n%candidate == 0 and (index < maxindex or isPrime(candidate)):
      primes = primes + [candidate] + factorize(n//candidate)
    index += 1            
    if index < maxindex:
      candidate = ListOfPrimes[index]
    else:
      candidate += 2
  return primes

def condense(L):
  """ Condense result in list to prime^nth_power format """
  prime,count,list=0,0,[]
  for x in L:
    if x == prime:
      count += 1
    else:
      if prime != 0:
        list = list + [str(prime) + '^' + str(count)]
      prime,count=x,1
  list = list + [str(prime) + '^' + str(count)]
  return list

if __name__ == '__main__':
  print condense(factorize(long(sys.argv[1])))

# Sample output
#
# python factorize.py 173248246132375748867198458668657948626531982421875
# ['3^24', '5^14', '7^33', '13^1']

Time complexity

The algorithm described above works fine for small n, but becomes impractical as n gets larger. For example, for an 18-digit (or 60 bit) number, all primes below about 1,000,000,000 may need to be tested, which is taxing even for a computer. Adding two decimal digits to the original number will multiply the computation time by 10.

The difficulty (large time complexity) of factorization makes it a suitable basis for modern cryptography.

See also: Euler's Theorem, Integer factorization, Trial division

External link

10-26-2009 08:16:03
The contents of this article is licensed from www.wikipedia.org under the GNU Free Documentation License. Click here to see the transparent copy and copyright details
Science kits, science lessons, science toys, maths toys, hobby kits, science games and books - these are some of many products that can help give your kid an edge in their science fair projects, and develop a tremendous interest in the study of science. When shopping for a science kit or other supplies, make sure that you carefully review the features and quality of the products. Compare prices by going to several online stores. Read product reviews online or refer to magazines.

Start by looking for your science kit review or science toy review. Compare prices but remember, Price $ is not everything. Quality does matter.
Science Fair Coach
What do science fair judges look out for?
ScienceHound
Science Fair Projects for students of all ages
All Science Fair Projects.com Site
All Science Fair Projects Homepage
Search | Browse | Links | From-our-Editor | Books | Help | Contact | Privacy | Disclaimer | Copyright Notice