Solved a few more problems
003: php 005: php, ruby 006: php, ruby, c
This commit is contained in:
		
							
								
								
									
										33
									
								
								ProjectEuler/003/solve.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								ProjectEuler/003/solve.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
<?php
 | 
			
		||||
$number = 600851475143;
 | 
			
		||||
 | 
			
		||||
echo max(factorize($number));
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Returns a sorted array of the prime factorization of $num
 | 
			
		||||
 * @staticvar array $aFactors
 | 
			
		||||
 * @param type int Number to factorize
 | 
			
		||||
 * @return type array Prime factors
 | 
			
		||||
 */
 | 
			
		||||
function factorize($num) {
 | 
			
		||||
	// Returns a sorted array of the prime factorization of $num 
 | 
			
		||||
	// Caches prior results.  Returns empty array for |$num|<2 
 | 
			
		||||
	// eg. factorize(360) => [5, 3, 3, 2, 2, 2] 
 | 
			
		||||
	static $aFactors = array();
 | 
			
		||||
	if (2 > $num = abs($num))
 | 
			
		||||
		return array();  // negatives, 1, 0 
 | 
			
		||||
 | 
			
		||||
	if ($aFactors[$key = "x$num"]) {	 // handles doubles 
 | 
			
		||||
		// Been there, done that 
 | 
			
		||||
		if (($factor = $aFactors[$key]) == $num)
 | 
			
		||||
			return array($num);
 | 
			
		||||
		return array_merge(factorize($num / $factor), array($factor));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Find a smallest factor 
 | 
			
		||||
	for ($sqrt = sqrt($num), $factor = 2; $factor <= $sqrt; ++$factor)
 | 
			
		||||
		if (floor($num / $factor) == $num / $factor)
 | 
			
		||||
			return array_merge(factorize($num / $factor), array($aFactors[$key] = $factor));
 | 
			
		||||
 | 
			
		||||
	return (array($aFactors[$key] = $num));
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user