16677181699666574 >= 3**x を満たす最大の整数 x を求めようとして,両辺の log をとって
log(16677181699666574) >= x * log(3)
(log(16677181699666574) / log(3)) の整数部 = x
Python で
>>> import math
>>> math.log(16677181699666574) /math.log(3)
33.99999999999999
>>> int(math.log(16677181699666574) /math.log(3))
33
しかし,それは明らかに間違い
3**33 = 5559060566555523
3**34 = 16677181699666569 < 16677181699666574
本当は,x は 34 だ
R でも,同じように間違った答えになる。
> options(digits=16)
> log(16677181699666574) / log(3)
[1] 33.99999999999999
> as.integer(log(16677181699666574) / log(3))
[1] 33
library(Rmpfr)
as.integer(log(mpfr(16677181699666574,100))/log(mpfr(3,100)))
だとちゃんと34になります
ご存じとは思いますが念のため