LINUX.ORG.RU
ФорумTalks

[вещества] 2^100000

 


0

0

Написал ради интереса программу возводящую число в произвольную степень, на эрланге.

Возвёл 2 в 100000 степень, вот результат:

http://pastebin.com/mefbd2f7

в милиллионную степень возводил примерно минут 25, к сожалению я забыл что у меня в терминале отображается только 1000 строк, число целиком не влезло :(.

★★★★★

s/милиллионную/миллионную/

ptah_alexs ★★★★★
() автор топика
Ответ на: комментарий от ist76

Интересно.

Завтра если не лень будет сделаю тоже на РЕФАЛе, и измерю сколько времени считать будет.

ptah_alexs ★★★★★
() автор топика
Ответ на: комментарий от ptah_alexs

О опять ВЕЛИКАЯ РЕКУРСИЯ !

Вам никто не рассказывал, как возводить в степень за log(N) операций умножения вместо N операций?

sign
()

>в милиллионную степень возводил примерно минут 25

Я, может, чего-то не понимаю, но два в миллионную степень возводится за 14.6 микросекунд ;)

% python -m timeit '2 << (10**6 - 1)'
100000 loops, best of 3: 14.6 usec per loop

anonymous4
()
Ответ на: комментарий от anonymous4

а ты пробовал само вычисление запустить? и к тому же у меня относительно слабая машина, на современных быстрее будет.

ptah_alexs ★★★★★
() автор топика
Ответ на: комментарий от ptah_alexs

Что "само вычисление"? Сдвинуть один бит на 1М разрядов можно хоть в уме :) Другое дело потом преобразовать в десятичную запись получившееся число. Вот это да, это займет время. Но не больше минуты, я думаю.

anonymous4
()
Ответ на: комментарий от anonymous4

эм, да. что то я не подумал про сдвиг :). У меня три минуты думал. Но в любом случае сдвиг только для степеней двойки. Надо мне было возводить в степень другое число, например 5.

ptah_alexs ★★★★★
() автор топика
Ответ на: комментарий от anonymous4

char *big_num = calloc((S >> 3) + 1, 1);
big_num[S >> 3] = 1 << (S & 7);

думаю память выделяться будет дольше чем сам расчет :)

imhotep
()

Забавненько. ghci потребовалось не более трёх секунд для возведения в миллионную степень. 2^1000000.

Miguel ★★★★★
()
Ответ на: комментарий от quaternion

Так а не прикидка ли нам говорит, что 30001?

Кстати, не поверил, что вот так все эти интерпретаторы лихо жрут длинную арифметику автоматически. Неужто жрут? (аргх, как я ненавижу оффтопик, в котором мне приходится работать порой!!!)

Slesarev
()

питон говорит что 2^100000 ровно в 10 раз длиннее чем 2^1000000

30103 - 301030 цифр

кстати считало не 25 минут а около минуты

долго считает только str(), а сама арифметика 2**1000000 быстро :)

olegsov
()
Ответ на: комментарий от Slesarev

> Кстати, не поверил, что вот так все эти интерпретаторы лихо жрут длинную арифметику автоматически. Неужто жрут?

Не верь. Компиляторы тоже, без проблем, автоматически.

> как я ненавижу оффтопик

При чём тут оффтопик?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

>>При чём тут оффтопик?

гыыыы.

Вообщето, мне просто приходится в нём работать часто и я не могу проверить всю эту хрень.

Slesarev
()
Ответ на: комментарий от Slesarev

> я не могу проверить всю эту хрень.

Можешь. В том числе в оффтопике.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.