/** * Note: This function has a big weakness, that is, if you provide it with a huge prime to decompose, it'll basically * have to generate all primes up to that number to discover it is prime itself... * @param int $number * @return int[] an array of prime => count */ public static function solve($number) { $factors = []; foreach (Prime::generator() as $prime) { // We should always end at 1 if ($number <= 1) { break; } if (self::isPrime($number)) { $factors[$number] = 1; break; } if ($number % $prime !== 0) { continue; } if (!isset($factors[$prime])) { $factors[$prime] = 0; } // Divide the number by this factor by as many time as possible while ($number % $prime === 0) { ++$factors[$prime]; $number /= $prime; } } return $factors; }
function q7($number) { $count = 0; foreach (Prime::generator() as $prime) { ++$count; if ($count === $number) { return $prime; } } }
function q10($number) { $result = 0; foreach (Prime::generator() as $prime) { if ($prime >= $number) { break; } $result += $prime; } return $result; }