Факторизация больших чисел
Я написал текст для факторизации чисел произвольной длины
ini_set('max_execution_time', 0);
function check($prime, &$number, &$result)
{
$power = 0;
while (bcmod($number, $prime) == 0) {
$power = bcadd($power, 1);
$number = bcdiv($number, $prime);
}
if ($power) {
$result[] = ['prime' => $prime, 'power' => $power];
}
}
function primefactor($number)
{
$n = $number;
$result = [];
$first_prime_numbers = [2, 3, 5, 7];
$grid_prime_numbers = [11, 13, 17, 19, 23, 29, 31, 37];
$sqrt = bcsqrt($number);
foreach ($first_prime_numbers as $first_prime_number) {
check($first_prime_number, $number, $result);
}
$i = 0;
do {
$k = bcadd(bcmul(30, $i), current($grid_prime_numbers));
check($k, $number, $result);
if (!next($grid_prime_numbers)) {
$i = bcadd($i, 1);
reset($grid_prime_numbers);
}
} while (bccomp($k, $sqrt) < 0);
if ($number != 1) {
$result[] = ['prime' => $number, 'power' => 1];
}
echo $n.' = ';
foreach ($result as $item) {
echo $item['prime'].'<sup>'.$item['power'].'</sup> ';
}
echo '<br>';
}
Но при попытке факторизовать числа, более 17 знаков происходит зависание. При этом вот здесь: //https://ru.numberempire.com/numberfactorizer.php факторизация чисел того же порядка происходит моментально
Существует ли какой-то алгоритм на php для факторизации больших чисел?