Просмотр полной версии : Конкурс для программистов
Stanislaw
22.04.2009, 05:53
Кто максимально быстро назовет количество нулей на конце и пять последних чисел перед ними у факториала числа 13000.
P.S.: если кто не знает, факториал числа n = 1*2*3*...*n
То есть факториал 6 = 1*2*3*4*5*6=720.
Итак! Кто же решится реализовать ЭТО на php? ;)
Stanislaw
22.04.2009, 06:16
Могу привести скрипт, который будет считать небольшие факториалы. как его усовершенствовать - в этом соль задачки :)
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
примерно представляешь какой размерности придется хранить числа? и есть ли такие типы данных в природе. Ога, есть.
Тип long в питоне
import operator
reduce(operator.mul, range(1, 13000 + 1))
nerezus или просто
from math import factorial
a = factorial(13000)
Stanislaw
22.04.2009, 13:24
NuR выиграл=)
Stanislaw, неа. Gifts выиграл.
Stanislaw
22.04.2009, 20:26
Кто максимально быстро назовет количество нулей на конце и пять последних чисел перед ними у факториала числа 13000.
NuR сделал это первый
mailbrush
22.04.2009, 20:44
Реально, школьник. Тебе что важно - кто сделал первый, или кто качественнее сделал?
astrologer
22.04.2009, 21:20
Вообще-то, для этого не нужно считать факториал.
Количество нулей можно найти хоть на бумажке, т.к. ноль образуется из произведения 2 * 5, двойки всегда в избытке. function countZeroes($n)
{
$base = 5;
$power = 1;
$amount = 0;
while($power < $n)
{
$amount += floor($n / $power *= $base);
}
return $amount;
}
echo countZeroes(13000); // 3248
Скорее всего это вообще решается без циклов, одним выражением.
astrologer А 5 последних цифр кто будет считать?)
Я чтото вообще непонял,а почему это конкурс? И где тогда призы)
NuR сделал это первый Сомневаюсь. Я написал код за 30 секунд. Так что не поверю, что он написал быстрее.
Код Gifts же проще, чем мой. Значит он лучше и пишется еще быстрее.
Все, давайте нам в качестве приза по красненькой феррари.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot