Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
function q49()
{
    $primes = Prime::between(1000, 9999);
    $groups = [];
    foreach ($primes as $prime) {
        $primeDigits = str_split($prime);
        sort($primeDigits);
        $primeIdentifier = implode('', $primeDigits);
        $groups[$primeIdentifier][] = $prime;
    }
    $groupsToTest = [];
    foreach ($groups as $group) {
        if (count($group) >= 3) {
            $groupsToTest[] = $group;
        }
    }
    foreach ($groupsToTest as $group) {
        $groupSize = count($group);
        for ($i = 0; $i < $groupSize; ++$i) {
            for ($j = $i + 1; $j < $groupSize; ++$j) {
                for ($k = $j + 1; $k < $groupSize; ++$k) {
                    if ($group[$i] === 1487 && $group[$j] === 4817 && $group[$k] === 8147) {
                        continue;
                    }
                    $distance1 = $group[$j] - $group[$i];
                    $distance2 = $group[$k] - $group[$j];
                    if ($distance1 === $distance2) {
                        return $group[$i] . $group[$j] . $group[$k];
                    }
                }
            }
        }
    }
}
Ejemplo n.º 3
0
function q7($number)
{
    $count = 0;
    foreach (Prime::generator() as $prime) {
        ++$count;
        if ($count === $number) {
            return $prime;
        }
    }
}
Ejemplo n.º 4
0
function q10($number)
{
    $result = 0;
    foreach (Prime::generator() as $prime) {
        if ($prime >= $number) {
            break;
        }
        $result += $prime;
    }
    return $result;
}
Ejemplo n.º 5
0
function q35($max)
{
    $primes = Prime::upTo($max);
    $primes = array_flip($primes);
    $circularPrimesCount = 0;
    foreach ($primes as $prime => $dontCare) {
        $length = strlen($prime);
        $isCircular = true;
        for ($i = 0; $i < $length; ++$i) {
            $rotatedPrime = Str::rotate($prime, $i);
            if (!isset($primes[$rotatedPrime])) {
                $isCircular = false;
                break;
            }
        }
        if ($isCircular) {
            ++$circularPrimesCount;
        }
    }
    return $circularPrimesCount;
}