toNum <- function(n){ n <- rev(n) num <- 0 for(i in 1:length(n)){ num <- num + n[i]*10^(i-1) } return(num) } toDigits <- function(n){ rev(floor(n/(10^(0:floor(log(n, 10)))))%%10) } is.connect <- function(a, b){ a%%100 == floor(b/10) } divisors <- c(3,5,7,11,13,17) candidates <- 2*(ceiling(100/2):floor(1000/2)) for(i in divisors){ candL <- candidates candidates <- numeric(0) candR <- numeric(0) count <- 0 candR <- i*(1:floor(1000/i)) for(j in 1:length(candL)){ for(k in 1:length(candR)){ if(is.connect(candL[j], candR[k])){ count <- count+1 candidates[count] <- candL[j]*10 + candR[k]%%10 } } } } ans <- 0 for(i in 1:length(candidates)){ dig <- toDigits(candidates[i]) if((length(unique(dig))==9) && length(dig[dig==0])==1){ ans <- ans + toNum(c(setdiff(0:9, dig),dig)) } }
Pandigital数を総当りするとしても300万通り以上ある。
なのでとが「接続」できるかどうかを調べて候補を生成した。
でもfor3重だし十数秒かかる…