2のべき乗数,2^0, 2^1, 2^2, 2^3, ... の先頭桁を考える。
一見,1, 2, 4, 8, 1, 3, 6, 1, 2, 5, 1, 2, 4, ... と長さ10の周期で循環しそうに見えるがそれは違う。
先頭桁に,7,9 は出てこないように思うとそれは違う。
以下のプログラムで出力される行方向優先の行列が,先頭桁が何であるかを示している。
library(gmp)
func <- function(x)
{
return(as.integer(unlist(strsplit(as.character(x), ""))[1]))
}
x <- as.bigz(1)
n <- 140
f <- integer(n)
for (i in 1:n) {
x <- x*2
f[i] <- func(x)
}
matrix(f, ncol=10, byrow=TRUE)
結果
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 2 4 8 1 3 6 1 2 5 1
[2,] 2 4 8 1 3 6 1 2 5 1
[3,] 2 4 8 1 3 6 1 2 5 1
[4,] 2 4 8 1 3 6 1 2 5 1
[5,] 2 4 8 1 3 7 1 2 5 1
[6,] 2 4 9 1 3 7 1 2 5 1
[7,] 2 4 9 1 3 7 1 2 5 1
[8,] 2 4 9 1 3 7 1 3 6 1
[9,] 2 4 9 1 3 7 1 3 6 1
[10,] 2 4 9 1 3 7 1 3 6 1
最初に先頭桁が 7 になるのは 2^46,9 になるのは 2^53 である
> as.bigz(2)^45
[1] "35184372088832"
> as.bigz(2)^46
[1] "70368744177664"
> as.bigz(2)^52
[1] "4503599627370496"
> as.bigz(2)^53
[1] "9007199254740992"