beldmit: (Программизм)
[personal profile] beldmit
Помните задачку, встреченную мной впервые у Перельмана - про самое большое число, записываемое тремя девятками, 999?

Если подумать, то представление этого числа как строки - это всего-то 300 Мб. Наверняка его получится вычислить на современных компьютерах "в лоб" за разумное время. Осталось понять, какие языки поддерживают соответствующие типы данных.

Date: 2009-10-19 06:47 pm (UTC)
From: [identity profile] slobin.livejournal.com
Ну вот смотри, что у меня получается: допустим, мы будем реализовывать свою "очень длинную" арифметику над clisp'овской "просто длинной". То есть у нас "цифрой" будет, ну, скажем, 250000-значное число (считать удобнее сразу в десятичной системе, иначе потом переводить замучаешься). Итоговый ответ должен состоять из примерно 99×log109=369693100 обычных десятичных цифр, или 1500 наших длинных. Умножать будем методом Карацубы, потому что для программной реализации (при наличии в языке рекурсии, но у нас, чай, не ФОРТРАН-IV) он даже проще, чем "в столбик". Сложность меньше n1.6, то есть, нам потребуется меньше 120000 "просто длинных" умножений на одно "очень длинное". Количество умножений для возведения в степень примерно равно числу бит в записи показателя, то есть log2387420489=29. Тут мы спокойно оцениваем сверху, что все промежуточные результаты будут такой же длины, как ответ (на самом деле большая их часть заметно короче). Пусть 30. На всю задачу потребуется 120000*30=3600000 "просто длинных" умножений. Одно такое умножение на моей машине занимает (замеряет) 0.75 секунды. 3600000*0.75/86400 -- в общем, месяц.

... Эльфийский ислам - это религия нордических халифов ...

Date: 2009-10-20 06:26 pm (UTC)
From: [identity profile] beldmit.livejournal.com
997 с помощью bc посчитано за 18 минут. Поставил 998 на ночь.

Date: 2009-10-21 07:04 pm (UTC)
From: [identity profile] beldmit.livejournal.com
beldmit@manul2$ cat tmp/exp.txt
9^9^8
quit
beldmit@manul2$ time bc tmp/exp.txt > tmp/9_9_8

real 511m52.674s
user 456m19.427s
sys 3m45.418s

То есть на моей машине оценка времени для 999 - наверное, неделя.

Зашедший сегодня ко мне Ран предложил использовать emacs-овый calc.

Однако

Date: 2009-12-17 08:35 pm (UTC)
From: [identity profile] beldmit.livejournal.com
beldmit@manul2$ time pure !$ > tmp/9_9_7_pure
time pure tmp/997.pure > tmp/9_9_7_pure

real 0m21.070s
user 0m17.429s
sys 0m0.408s

Re: Однако

Date: 2009-12-18 09:53 am (UTC)
From: [identity profile] slobin.livejournal.com
На моей машине отношение bc и pure составило 24 раза. Правда, bc был под дебианом, а pure под виндой -- если pure под дебиан поставить, будет, наверное, как у тебя. Понятное дело, что фишка не в языке, просто он линкуется с правильными библиотеками (с уже упомянутой здесь кем-то mpz). Но это очень удобный интерфейс к этим библиотекам. ;-) А 9^9^8 у тебя посчиталось? У меня под виндой падает. (затаив дыхание) А 9^9^9?

... Ускорение темпов роста повышения производительности труда ...

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 7th, 2026 07:06 am
Powered by Dreamwidth Studios