1. Python / Говнокод #7691

    −85

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    m = 1
    for i in range(100):
      for j in range(100):
        for k in range(100):
          m *= i*j*k
    #Почему m = 0?

    Ещё один перл автора 7568 и 7545

    Запостил: Fai, 29 Августа 2011

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

    • таблица умножения?
      Ответить
    • range(100) перебирает от 0 до 99, или от 1 до 100?
      Ответить
      • от 0 до 99
        Ответить
        • А даже если бы было от 1 до 100...
          m = 100!*100*(100!*(100*100!))
          Фз какой тип данных осилит такое число.
          Ответить
          • в питоне целые числа ограничены только оперативной памятью. а её потребуется немало...
            Ответить
            • >в питоне целые числа ограничены только оперативной памятью
              ссылку можно?
              Ответить
              • А что такого, длинная арифметика, динамически выделяемый буфер под разряды числа итд...

                В числе будет порядка 2млн цифр, короче мегабайт понадобится.
                Ответить
                • Дело далеко не в памяти, а во времени, которое нужно на выполнение такого кода.
                  Например с эквивалентным кодом (пофиксеным) для числа 40 код выполняется около 20 секунд, а число оказывается длинной в 229976 десятичных цифр.
                  Угадайте на сколько порядков дольше будет выполняться код для числа 100?
                  Ответить
                • >> короче мегабайт понадобится
                  $ time python test.py > test.out

                  real 155m1.178s
                  user 153m25.038s
                  sys 1m30.490s

                  $ ls -l test.out
                  -rw-r--r-- 1 user 4585988 30 авг 09:20 test.out
                  Ответить
                • Порядка 4739090 цифр, понадобится два мегабайта.
                  Ответить
              • http://www.python.org/dev/peps/pep-0237/
                ещё во втором питоне ввели.
                Ответить
                • Ага, спасибо. Я как раз такой интеграции и удивился, думал, просто модуль для длинной арифметики есть.
                  Ответить
          • Если бы было от 1 до n, результат был бы n!^{3n^2}.

            При n=100 это более чем 4739089-значное число.
            Ответить
          • (100!)**3
            Ответить
    • Хоть бы xrange тогда уж использовал...
      Ответить
      • Python 3.x
        Ответить
        • А, ну окей. Все-равно говно :-) Коммент автора просто потрясающий. Наверное в школе учили только тому, что от перестановки слагаемых сумма не меняется, а что если умножить любое число на ноль, то будет ноль, он не знает :))
          Ответить
          • Просто он не допёр что range(x) с нуля начинается.
            Ответить
    • >Почему m = 0?
      Потому что автор ниасилил почитать про range в документации.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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