title: efficient ways of finding the largest prime factor of a number
body: <p>I'm doing this problem on a site that I found (project Euler), and there is a question that involves finding the largest prime factor of a number. My solution fails at really large numbers so I was wondering how this code could be streamlined?</p>
  
  <pre><code>""" Find the largest prime of a number """
  
  
  def get_factors(number):
      factors = []
      for integer in range(1, number + 1):
          if number%integer == 0:
              factors.append(integer)
      return factors
  
  def test_prime(number):
      prime = True
      for i in range(1, number + 1):
          if i!=1 and i!=2 and i!=number:
              if number%i == 0:
                  prime = False
      return prime
  
  def test_for_primes(lst):
      primes = []
      for i in lst:
          if test_prime(i):
              primes.append(i)
      return primes
  
  
  ################################################### program starts here
  def find_largest_prime_factor(i):
      factors = get_factors(i)
      prime_factors = test_for_primes(factors)
      print prime_factors
  
  
  print find_largest_prime_factor(22)
  
  #this jams my computer
  print find_largest_prime_factor(600851475143)
  </code></pre>
  
  <p>it fails when using large numbers, which is the point of the question I guess.  (computer jams, tells me I have run out of memory and asks me which programs I would like to stop).</p>
  
  <p><strong>************************************</strong> thanks for the answer. there was actually a couple bugs in the code in any case. so the fixed version of this (inefficient code) is below.</p>
  
  <pre><code>""" Find the largest prime of a number """
  
  
  def get_factors(number):
      factors = []
      for integer in xrange(1, number + 1):
          if number%integer == 0:
              factors.append(integer)
      return factors
  
  def test_prime(number):
      prime = True
      if number == 1 or number == 2:
          return prime
      else:
          for i in xrange(2, number):
              if number%i == 0:
                  prime = False
      return prime
  
  
  def test_for_primes(lst):
      primes = []
      for i in lst:
          if test_prime(i):
              primes.append(i)
      return primes
  
  
  ################################################### program starts here
  def find_largest_prime_factor(i):
      factors = get_factors(i)
      print factors
      prime_factors = test_for_primes(factors)
      return prime_factors
  
  
  print find_largest_prime_factor(x)
  </code></pre>