Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Конкурс для программистов |

22.04.2009, 05:53
|
|
Новичок
Регистрация: 06.03.2009
Сообщений: 9
Провел на форуме: 65187
Репутация:
16
|
|
Конкурс для программистов
Кто максимально быстро назовет количество нулей на конце и пять последних чисел перед ними у факториала числа 13000.
P.S.: если кто не знает, факториал числа n = 1*2*3*...*n
То есть факториал 6 = 1*2*3*4*5*6=720.
Итак! Кто же решится реализовать ЭТО на php? 
|
|
|

22.04.2009, 06:16
|
|
Новичок
Регистрация: 06.03.2009
Сообщений: 9
Провел на форуме: 65187
Репутация:
16
|
|
Могу привести скрипт, который будет считать небольшие факториалы. как его усовершенствовать - в этом соль задачки
function get_fact($n)
{
$fact = 1;
for($i=1;$i<=$n;++$i)
{
$fact *= $i;
}
return $fact;
}
////////////////
Временно офф - пошел в школу
Тому, кто первый назовет цифры отстегну репки
|
|
|

22.04.2009, 06:22
|
|
Участник форума
Регистрация: 11.12.2005
Сообщений: 160
Провел на форуме: 745130
Репутация:
159
|
|
ты в школе изучал математику? примерно представляешь какой размерности придется хранить числа? и есть ли такие типы данных в природе.
upd
на 32 битном пхп во флоат можно уместить примерно 170! если прикидывать по формуле Стиринга sqrt(2*pi()*$n)*pow(($n/M_E),$n);
upd
хм.. пхп ацкая вещь, 6826351722496 потом 3248 нуля
вот так оно выглядит xD
http://www.sendspace.com/file/5zqhee
Последний раз редактировалось NuR; 22.04.2009 в 06:42..
|
|
|

22.04.2009, 11:07
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
примерно представляешь какой размерности придется хранить числа? и есть ли такие типы данных в природе.
Ога, есть.
Тип long в питоне
Код:
import operator
reduce(operator.mul, range(1, 13000 + 1))
|
|
|

22.04.2009, 11:48
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
nerezus или просто
Код:
from math import factorial
a = factorial(13000)
|
|
|

22.04.2009, 13:24
|
|
Новичок
Регистрация: 06.03.2009
Сообщений: 9
Провел на форуме: 65187
Репутация:
16
|
|
NuR выиграл=)
|
|
|

22.04.2009, 18:28
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
Stanislaw, неа. Gifts выиграл.
|
|
|

22.04.2009, 20:26
|
|
Новичок
Регистрация: 06.03.2009
Сообщений: 9
Провел на форуме: 65187
Репутация:
16
|
|
Кто максимально быстро назовет количество нулей на конце и пять последних чисел перед ними у факториала числа 13000.
NuR сделал это первый
|
|
|

22.04.2009, 20:44
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Реально, школьник. Тебе что важно - кто сделал первый, или кто качественнее сделал?
|
|
|

22.04.2009, 21:20
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме: 3069349
Репутация:
808
|
|
Вообще-то, для этого не нужно считать факториал.
Количество нулей можно найти хоть на бумажке, т.к. ноль образуется из произведения 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
Скорее всего это вообще решается без циклов, одним выражением.
Последний раз редактировалось astrologer; 22.04.2009 в 21:25..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|