Problem 112に引き続いてbouncy numberに関連した問題.
bouncy numberで無い数の割合は調べる範囲を広げるほど減っていって,例えば100万未満だと12951個で,10未満まで範囲を広げても27732個しかない.
探索範囲を1 googol(10)未満の数字にしたとき,bouncy numberでない数はいくつあるか.
これはProblem 112に比べたらずっと簡単で,計算時間も380msだった.gmp使ったけど…
ところでbigzクラス用にsum.bigzという名前で関数定義したらこんな感じでエラー出てなんか上手く行かなかった.
> library(gmp) > sum.bigz <- function(z) rev(cumsum(z))[1] > x <- as.bigz(1:5) > sum(x) 以下にエラー sum.bigz(c(05, 00, 00, 00, 01, 00, 00, 00, 01, 00, 00, 00, 01, : 使われていない引数 (na.rm = FALSE)
何かやり方間違えてるんだろうか.
library(gmp) sum <- function(z){ rev(cumsum(z))[1] } dec.nums <- function(d){ if(d < 2) return(9) d <- d - 1 pattern <- as.bigz(c(0, rep(1, 9))) sum.p <- sum(pattern) for(i in 1:d){ pattern <- c(sum(pattern), #0 sum(pattern[2:10]), #1 sum(pattern[3:10]), #2 sum(pattern[4:10]), #3 sum(pattern[5:10]), #4 sum(pattern[6:10]), #5 sum(pattern[7:10]), #6 sum(pattern[8:10]), #7 sum(pattern[9:10]), #8 sum(pattern[10])) #9 sum.p <- sum.p + sum(pattern) } return(sum.p) } inc.nums <- function(d){ if(d < 2) return(9) d <- d - 1 pattern <- as.bigz(rep(1,9)) sum.p <- sum(pattern) for(i in 1:d){ pattern <- c(sum(pattern), #9 sum(pattern[2:9]), #8 sum(pattern[3:9]), #7 sum(pattern[4:9]), #6 sum(pattern[5:9]), #5 sum(pattern[6:9]), #4 sum(pattern[7:9]), #3 sum(pattern[8:9]), #2 sum(pattern[9])) #1 sum.p <- sum.p + sum(pattern) } return(sum.p) } bouncy.nums <- function(d){ pow.bigz(10, d) - 1 - (dec.nums(d) + inc.nums(d) - d * 9) } pow.bigz(10, 100) - bouncy.nums(100) - 1