function q21($from, $to) { $integerToSum = []; for ($i = $from; $i < $to; ++$i) { $primeDecomposition = IntegerFactorization::solve($i); $sumOfDivisors = Math::divisorsSum($primeDecomposition); $sumOfProperDivisors = $sumOfDivisors - $i; $integerToSum[$i] = $sumOfProperDivisors; } $sumOfAmicableNumbers = 0; foreach ($integerToSum as $integer => $sum) { if ($integer !== $sum && isset($integerToSum[$sum]) && $integerToSum[$sum] === $integer) { $sumOfAmicableNumbers += $integerToSum[$integer] + $integerToSum[$sum]; unset($integerToSum[$integer]); unset($integerToSum[$sum]); } } return $sumOfAmicableNumbers; }
public static function greatestCommonDivisor(array $numbers) { if (empty($numbers)) { throw new LogicException('Cannot obtain greatest common divisor on an empty array.'); } $factors = []; foreach ($numbers as $number) { $decomposition = IntegerFactorization::solve($number); foreach ($decomposition as $prime => $count) { $factors[$prime][] = $count; } } $total = 1; foreach ($factors as $prime => $counts) { if (count($counts) === 1) { continue; } sort($counts); $total *= $prime ** $counts[0]; } return $total; }