NISHIO Hirokazu[Translate]
長整数が速い
Pythonの長整数が意外と速いので、高々10^100程度の値を1000回足すなら、毎回剰余取ったりせずにそのまま計算した方が速い
python
In [27]: %%timeit ...: x = int("7" * 100) ...: for i in range(1000): ...: x += x ...: 71.3 µs ± 624 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each) In [28]: %%timeit ...: x = int("7" * 100) ...: for i in range(1000): ...: x += x ...: x %= 1000000007 ...: 104 µs ± 890 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

ABC177では、毎回剰余を取らずに計算して最後に剰余を取るコードがPyPy3提出の中での速度一位だった
この問題は高々10^9を10^6回加算乗算して最大でも10^30程度に収まるものだった

"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]