gluck1986/project-lvl1-s156

View on GitHub
src/Helpers.php

Summary

Maintainability
A
55 mins
Test Coverage
<?php

namespace BrainGames\Helpers;

const FERMA_MAX_TRY = 50;

function calcGCD(int $fval, int $sval): int
{
    list($lower, $highest) = ($fval > $sval ? [$sval, $fval] : [$fval, $sval]);
    if (($remainder = ($highest % $lower)) === 0) {
        return $lower;
    }

    return calcGCD($remainder, $lower);
}

function isPrime(float $number, int $try = 0): bool
{
    if ($try > FERMA_MAX_TRY) {
        return true;
    }
    if ($number === 2 || $number === 1) {
        return true;
    }
    $a = mt_rand(1, $number - 1);
    if (calcGCD($a, $number) !== 1) {
        return false;
    }
    if (($a ** ($number - 1) % $number) !== 1) {
        return false;
    }

    return isPrime($number, $try + 1);
}