Beispiel #1
0
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;
}
Beispiel #2
0
 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;
 }