[問題] 超 大數次方運算

作者: unknown (ya)   2019-02-26 13:32:58
最近發現 Python 的整數型別原來沒有上限,對於大數的支援實在非常完善,甚至幾十位數
相乘都能幾乎瞬間求得答案,所以就想挑戰一些大數的題目,像是這題:
http://bit.ly/2H7QGHo
我是直接 a ** b 喇,這樣花了 4.8 秒。然後我就在想如何改進。先 sum = a ** (b // 2
),再 sum *= 2,如果 b 是奇數再乘 a。但是如此一來反而要花 6.8 秒!
輸出的部分也有嘗試直接寫入 stdout.buffer 還是 4.8 秒
同一題一樣 Python 有人原本 4.7 秒變成 78 毫秒,到底怎麼辦得到啊?
下一題(http://bit.ly/2H1TuGc)測資更變態,提示說 Python 有特殊解法第一題可以在
0.1 秒內解出,第二題 Python 也有人在 0.5 秒內解出
先謝謝各位大大惹
作者: s860134 (s860134)   2019-02-26 20:24:00
建表查表會不會比較快?Divide and Conquer: a^20 == (a^2)^10 == (a ^4) ^5不確定這思考方向對不對我思考方向好像是錯的 因為算根本沒花多少時間= =
作者: alan23273850   2019-02-26 23:42:00
你有學過快速冪嗎 演算法課本去翻一翻 概念不難
作者: nini200 (200妮妮)   2019-02-26 23:45:00
python占便宜 哈哈哈
作者: oToToT (屁孩)   2019-02-26 23:46:00
剛剛我寫了個快速冪然後就TLE了,我覺得應該是python IO太慢
作者: s860134 (s860134)   2019-02-27 00:02:00
time python -c "str(pow(10**5,10**5))" 要七秒user 0m7.812s都花在轉字串...如果自幹的算法比 python 內建還快不就取代掉惹
作者: alen84204 (Dana)   2019-02-27 02:21:00
菜雞連AC都寫不出QQ
作者: alan23273850   2019-02-27 11:08:00
那如果試試這個?https://www.python123.io/index/topics/algorithm_100_days/100-days-of-algorithms-10
作者: edwar (海邊的野孩子)   2019-02-27 22:41:00
from decimal import *; getcontext().prec=700000;print(Decimal(10**5) ** (10**5))
作者: s860134 (s860134)   2019-02-28 13:04:00
上面 e 大寫法沒有問題,decimal 實作上有 type castinghttps://goo.gl/iHMtVr3.4 https://goo.gl/QNofY9,可以從 Decimal.__pow__ 查

Links booklink

Contact Us: admin [ a t ] ucptt.com