[问题] 超 大数次方运算

楼主: 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