These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #! /usr/bin/env python
 | |
| 
 | |
| # Factorize numbers.
 | |
| # The algorithm is not efficient, but easy to understand.
 | |
| # If there are large factors, it will take forever to find them,
 | |
| # because we try all odd numbers between 3 and sqrt(n)...
 | |
| 
 | |
| import sys
 | |
| from math import sqrt
 | |
| 
 | |
| def fact(n):
 | |
|     if n < 1:
 | |
|         raise ValueError('fact() argument should be >= 1')
 | |
|     if n == 1:
 | |
|         return []  # special case
 | |
|     res = []
 | |
|     # Treat even factors special, so we can use i += 2 later
 | |
|     while n % 2 == 0:
 | |
|         res.append(2)
 | |
|         n //= 2
 | |
|     # Try odd numbers up to sqrt(n)
 | |
|     limit = sqrt(n+1)
 | |
|     i = 3
 | |
|     while i <= limit:
 | |
|         if n % i == 0:
 | |
|             res.append(i)
 | |
|             n //= i
 | |
|             limit = sqrt(n+1)
 | |
|         else:
 | |
|             i += 2
 | |
|     if n != 1:
 | |
|         res.append(n)
 | |
|     return res
 | |
| 
 | |
| def main():
 | |
|     if len(sys.argv) > 1:
 | |
|         source = sys.argv[1:]
 | |
|     else:
 | |
|         source = iter(raw_input, '')
 | |
|     for arg in source:
 | |
|         try:
 | |
|             n = int(arg)
 | |
|         except ValueError:
 | |
|             print arg, 'is not an integer'
 | |
|         else:
 | |
|             print n, fact(n)
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |