1. Куча / Говнокод #10229

    +121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    minChunksSize=1000.0 -- 100.0
     
    facbig :: Integer -> Integer
    facbig n = 
            let 
                    divisionProportion = 0.9 -- 2.0/3.0
                    amountOfChunk = truncate $ logBase divisionProportion $ minChunksSize/fromIntegral n
                    proportions = map (divisionProportion^) [amountOfChunk, amountOfChunk-1 .. 1]
                    centralChunkResults = map product [
                            let
                                    begin = proportionToItemNumber 1 beginRangeProportion
                                    end = proportionToItemNumber 0 endRangeProportion
                            in
                            [begin..end] | (endRangeProportion, beginRangeProportion) <- zip proportions $ tail proportions ]
                    beginChunkResult = product [1 .. proportionToItemNumber 0 $ last proportions]
                    endChunkResult = product [proportionToItemNumber 1 $ head proportions .. n]
            in product $ beginChunkResult:endChunkResult:centralChunkResults
            where
                    proportionToItemNumber shift proportion =
                            shift + truncate ((1.0-proportion)*fromIntegral n)
     
    fac n = if n <= (truncate $ 3.0*minChunksSize)
            then product [1..n]
            else facbig n
     
    main = print $ length $ show $ fac 100000

    Вот так вот школота считают число цифр в факториале числа.

    Запостил: HaskellGovno, 10 Мая 2012

    Комментарии (7) RSS

    • ShkolotaGovno
      Ответить
    • Big fac.
      Ответить
    • Пиздец.

      fac = product . enumFromTo 1
      len = length . show
      Ответить
      • Медленно. Тот ГК всяко быстрее т.к. умножает чанками.

        А вообще читаем алгоритм вычисления факториала тут:
        http://gmplib.org/manual/Factorial-Algorithm.html#Factorial-Algorithm
        Ответить

    Добавить комментарий