Конкурс для программистов

Discussion in 'PHP' started by Stanislaw, 22 Apr 2009.

  1. Stanislaw

    Stanislaw New Member

    Joined:
    6 Mar 2009
    Messages:
    8
    Likes Received:
    3
    Reputations:
    0
    Кто максимально быстро назовет количество нулей на конце и пять последних чисел перед ними у факториала числа 13000.
    P.S.: если кто не знает, факториал числа n = 1*2*3*...*n
    То есть факториал 6 = 1*2*3*4*5*6=720.

    Итак! Кто же решится реализовать ЭТО на php? ;)
     
  2. Stanislaw

    Stanislaw New Member

    Joined:
    6 Mar 2009
    Messages:
    8
    Likes Received:
    3
    Reputations:
    0
    Могу привести скрипт, который будет считать небольшие факториалы. как его усовершенствовать - в этом соль задачки :)
    function get_fact($n)
    {
    $fact = 1;
    for($i=1;$i<=$n;++$i)
    {
    $fact *= $i;
    }
    return $fact;
    }
    ////////////////
    Временно офф - пошел в школу
    Тому, кто первый назовет цифры отстегну репки
     
  3. NuR

    NuR Elder - Старейшина

    Joined:
    11 Dec 2005
    Messages:
    85
    Likes Received:
    58
    Reputations:
    -2
    ты в школе изучал математику? примерно представляешь какой размерности придется хранить числа? и есть ли такие типы данных в природе.
    upd
    на 32 битном пхп во флоат можно уместить примерно 170! если прикидывать по формуле Стиринга sqrt(2*pi()*$n)*pow(($n/M_E),$n);
    upd
    хм.. пхп ацкая вещь, 6826351722496 потом 3248 нуля
    вот так оно выглядит xD
    http://www.sendspace.com/file/5zqhee
     
    #3 NuR, 22 Apr 2009
    Last edited: 22 Apr 2009
    1 person likes this.
  4. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Ога, есть.
    Тип long в питоне

    Code:
    import operator
    reduce(operator.mul, range(1, 13000 + 1))
    
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    nerezus или просто
    Code:
    from math import factorial
    a = factorial(13000)
    
     
    _________________________
    1 person likes this.
  6. Stanislaw

    Stanislaw New Member

    Joined:
    6 Mar 2009
    Messages:
    8
    Likes Received:
    3
    Reputations:
    0
    NuR выиграл=)
     
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Stanislaw, неа. Gifts выиграл.
     
  8. Stanislaw

    Stanislaw New Member

    Joined:
    6 Mar 2009
    Messages:
    8
    Likes Received:
    3
    Reputations:
    0
    NuR сделал это первый
     
  9. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Реально, школьник. Тебе что важно - кто сделал первый, или кто качественнее сделал?
     
  10. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Вообще-то, для этого не нужно считать факториал.
    Количество нулей можно найти хоть на бумажке, т.к. ноль образуется из произведения 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
    Скорее всего это вообще решается без циклов, одним выражением.
     
    #10 astrologer, 22 Apr 2009
    Last edited: 22 Apr 2009
  11. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    astrologer А 5 последних цифр кто будет считать?)
     
    _________________________
  12. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    Сомневаюсь. Я написал код за 30 секунд. Так что не поверю, что он написал быстрее.
    Код Gifts же проще, чем мой. Значит он лучше и пишется еще быстрее.

    Все, давайте нам в качестве приза по красненькой феррари.