Кто максимально быстро назовет количество нулей на конце и пять последних чисел перед ними у факториала числа 13000. P.S.: если кто не знает, факториал числа n = 1*2*3*...*n То есть факториал 6 = 1*2*3*4*5*6=720. Итак! Кто же решится реализовать ЭТО на php?
Могу привести скрипт, который будет считать небольшие факториалы. как его усовершенствовать - в этом соль задачки function get_fact($n) { $fact = 1; for($i=1;$i<=$n;++$i) { $fact *= $i; } return $fact; } //////////////// Временно офф - пошел в школу Тому, кто первый назовет цифры отстегну репки
ты в школе изучал математику? примерно представляешь какой размерности придется хранить числа? и есть ли такие типы данных в природе. upd на 32 битном пхп во флоат можно уместить примерно 170! если прикидывать по формуле Стиринга sqrt(2*pi()*$n)*pow(($n/M_E),$n); upd хм.. пхп ацкая вещь, 6826351722496 потом 3248 нуля вот так оно выглядит xD http://www.sendspace.com/file/5zqhee
Вообще-то, для этого не нужно считать факториал. Количество нулей можно найти хоть на бумажке, т.к. ноль образуется из произведения 2 * 5, двойки всегда в избытке. PHP: function countZeroes($n) { $base = 5; $power = 1; $amount = 0; while($power < $n) { $amount += floor($n / $power *= $base); } return $amount; } echo countZeroes(13000); // 3248 Скорее всего это вообще решается без циклов, одним выражением.
Сомневаюсь. Я написал код за 30 секунд. Так что не поверю, что он написал быстрее. Код Gifts же проще, чем мой. Значит он лучше и пишется еще быстрее. Все, давайте нам в качестве приза по красненькой феррари.