Я построил класс, который находит наименьшее число, делящееся на все числа в заданном диапазоне.Оптимизация алгоритма PHP
Это мой код:
class SmallestDivisible
{
private $dividers = array();
public function findSmallestDivisible($counter)
{
$this->dividers = range(10, 20);
for($x=1; $x<$counter; $x++) {
if ($this->testIfDevisibleByAll($x, $this->dividers) == true) {
return $x;
}
}
}
private function testIfDevisibleByAll($x, $dividers)
{
foreach($dividers as $divider) {
if ($x % $divider !== 0) {
return false;
}
}
return true;
}
}
$n = new SmallestDivisible();
echo $n->findSmallestDivisible(1000000000);
Этот класс находит число, которое делится на все числа в диапазоне от 1 до 20 ($this->dividers
).
Я знаю, что он работает хорошо, так как я тестировал его с другими, более низкими диапазонами, но, к сожалению, он не может найти решение для range(10, 20)
в течение 30 секунд - и это время, после которого останавливается PHP-скрипт.
Параметр, который подается на метод findSmallestDivisible
, является потолком группы номеров, которые скрипт собирается проверить (например, от 1 до $counter
(1000000000 - это выполнение)).
Я был бы благодарен за предложения по поводу того, как я могу оптимизировать этот сценарий, чтобы он выполнялся быстрее.
Сколько времени это займет сейчас? Как долго вы это хотите? –
Рассмотрите вопросы оптимизации рабочего кода на http://codereview.stackexchange.com – kojiro
(Кроме того, время, после которого скрипт PHP остановлен, [настраивается] (http://php.net/manual/en/info. configuration.php # ini.max-time-time)) – kojiro