| 
									
										
										
										
											1996-11-27 19:52:01 +00:00
										 |  |  | #! /usr/bin/env python | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-12-18 13:45:17 +00:00
										 |  |  | # 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)... | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | from math import sqrt | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 05:56:09 +00:00
										 |  |  | error = 'fact.error'            # exception | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def fact(n): | 
					
						
							| 
									
										
										
										
											2004-07-18 05:56:09 +00:00
										 |  |  |     if n < 1: raise error   # fact() argument should be >= 1 | 
					
						
							|  |  |  |     if n == 1: return []    # special case | 
					
						
							|  |  |  |     res = [] | 
					
						
							|  |  |  |     # Treat even factors special, so we can use i = i+2 later | 
					
						
							|  |  |  |     while n%2 == 0: | 
					
						
							|  |  |  |         res.append(2) | 
					
						
							|  |  |  |         n = n/2 | 
					
						
							|  |  |  |     # Try odd numbers up to sqrt(n) | 
					
						
							|  |  |  |     limit = sqrt(float(n+1)) | 
					
						
							|  |  |  |     i = 3 | 
					
						
							|  |  |  |     while i <= limit: | 
					
						
							|  |  |  |         if n%i == 0: | 
					
						
							|  |  |  |             res.append(i) | 
					
						
							|  |  |  |             n = n/i | 
					
						
							|  |  |  |             limit = sqrt(n+1) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             i = i+2 | 
					
						
							|  |  |  |     if n != 1: | 
					
						
							|  |  |  |         res.append(n) | 
					
						
							|  |  |  |     return res | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2004-07-18 05:56:09 +00:00
										 |  |  |     if len(sys.argv) > 1: | 
					
						
							|  |  |  |         for arg in sys.argv[1:]: | 
					
						
							|  |  |  |             n = eval(arg) | 
					
						
							|  |  |  |             print n, fact(n) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             while 1: | 
					
						
							|  |  |  |                 n = input() | 
					
						
							|  |  |  |                 print n, fact(n) | 
					
						
							|  |  |  |         except EOFError: | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-09-11 16:34:35 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     main() |