今回は桁の大きな数字を計算する
方法についての解説です。

解説動画はこちら




2の1億乗と10の3000万乗

さて、早速ですが
どちらが大きい数字でしょうか

プログラミングであれば
ある程度の大きな数字でも
簡単に計算できます。

ただし、大きすぎる数字になると
計算が困難になってきます。

print(2 ** 100000000)
# ValueError: Exceeds the limit (4300) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit

これを解くには
少し工夫をしないといけません。


対数関数(LOG)

ここで少しだけ対数の説明です。
スクリーンショット 2024-05-18 15.26.15
a を何乗したら
b になるかというのが
Xです。


5 を 3 回かけたら 125 になるので
log5 125 = 3
になりますね。

また対数の性質として
スクリーンショット 2024-05-18 15.26.24
という形に変形が行えます。

P乗の対数は、対数のP倍に等しい

これを用いれば
どちらの数字が大きくなるかは
計算ができるはずです。

Pythonでは対数を扱うものとして
mathライブラリというものがあります。

これで対数の計算を行う事ができます。

Log2 と Log10 を使って
式を変形させます。
p * log2
p * log10

import math

print(math.log(2) * 100000000)
print(math.log(10) * 30000000)
69314718.05599453
69077552.78982137

これを見ると
2の1億乗の方が大きくなりますね




2の10000乗って何桁になる?

これもプログラミングでは簡単に解ける問題ですが
頭の中だけで考えるのは少し大変ですね

これも対数関数を用いてうまく求める事ができます。

常用対数(10を底とする対数)というものがあり
桁数は `2の常用対数 * 乗数 + 1` で求めることができます。
(小数点以下は切り捨て)
import math
l2 = math.log10(2) p = 10000 print(int(l2 * p) + 1)
3011

2の10000乗 は
3011桁になります。


このようにして
かなり桁の大きな数字の計算は
時間が掛かったり、計算自体ができない場合があります。

そんな時はlogを用いて
うまく数式を変換させてあげると
数字の比較などが行いやすくなります。

競技プログラミングなどでも
よく出る計算手法なので
覚えておくと良いかもしれませんね


今回はLOG(対数)に関する解説でした
それでは。