Добавить новость
103news.com
Интернет
Сентябрь
2019

Алгоритм Эвклида - НОК на php

0
Для повышение разряда в говнокодинге периодически решаю разные задачки и вот наткнулся на очередную:
Цитата:

//Сделайте функцию, которое будет принимать 2 числа, а возвращать их НОК - наименьшее общее кратное.
// НОК двух чисел - это самое маленькое число, которое делится и на одно, и на второе число. Пример: числа 12 и 15 имеют НОК 60.
// Число 60 делится и на 12, и на 15 и это самое минимальное такое число.
подумал пару минут и написал так
Цитата:

function Nok ($i, $n){
$start = microtime(true);
for ($a=1;$a<=1000000000000000;$a++){
$pervoe = $i*$a;
if ($pervoe % $n == 0){
echo "НОК=".$pervoe."<br>";
$finish = microtime(true);
$delta = $finish - $start;
echo $delta . ' сек.';
break;
}
}
}
Nok(1467,146000000);
//НОК=214182000000
//94.320394992828 сек.
проверил на малых числах, вроде работает. Загнал одним из чисел 146 млн. и ждал почти 100 сек. ответ.

Потом пишу сыну (он у меня на питоне кодит) - типа реши задачку. Он посмотрел и говорит - алгоритм Эвклида для этого есть, лучше не придумаешь.

Полез искать что за зверь, нашел решение на пхп
Цитата:

function gcd($a, $b) {
$num = $a;
$div = $b;
/* Euclid Algorithm */
while (true) {
$rem = $num % $div;
$num = $div;
$div = $rem;
if ($rem == 0) break; // no remainder?
}
return $num;

}
/* Least Common Multiple */
function lcm($a, $b) {
return $a * $b / gcd($a, $b);
}
$stat = microtime(true);
echo lcm(1467,146000000)."<br>";
$finish = microtime(true);
$delta = $finish - $stat;
echo $delta . ' сек.';

//НОК=214182000000
//0.00099992752075195 сек.
Восхитился математиками и математикой, но есть 2 вопроса:
1. почему какие бы числа я не загонял во второй код, он решает все почти мгновенно, вообще нет разницы сотни или миллиарды с триллионами?
2. почему microtime во втором коде сбоит и почти всегда показыает просто 0. (я перед каждым выполнением перезагружаю опенсервер) 1 раз покажет время, 10 раз - просто ноль, хотя цифры ввожу разные, результат показывает. Думал кеширует, но я то код меняю и серв перезапускаю, как так?






Губернаторы России





Губернаторы России
103news.net – это самые свежие новости из регионов и со всего мира в прямом эфире 24 часа в сутки 7 дней в неделю на всех языках мира без цензуры и предвзятости редактора. Не новости делают нас, а мы – делаем новости. Наши новости опубликованы живыми людьми в формате онлайн. Вы всегда можете добавить свои новости сиюминутно – здесь и прочитать их тут же и – сейчас в России, в Украине и в мире по темам в режиме 24/7 ежесекундно. А теперь ещё - регионы, Крым, Москва и Россия.

Moscow.media


103news.comмеждународная интерактивная информационная сеть (ежеминутные новости с ежедневным интелектуальным архивом). Только у нас — все главные новости дня без политической цензуры. "103 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию.

Мы не навязываем Вам своё видение, мы даём Вам объективный срез событий дня без цензуры и без купюр. Новости, какие они есть — онлайн (с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии).

103news.com — живые новости в прямом эфире!

В любую минуту Вы можете добавить свою новость мгновенно — здесь.

Музыкальные новости




Спорт в России и мире



Новости Крыма на Sevpoisk.ru



Частные объявления в Вашем городе, в Вашем регионе и в России