「排他的 n 乗数」と呼ばれる数は,
(a) 10 進数で表記したときに,同じ数字を含まない
(b) n 乗した結果(10 進数表記)に,元の数に現れる数字が含まれない
というもので,例えば,608 は,608^3=224755712 なので「排他的3乗数」,284 は 284^4 = 6505390336 なので「排他的4乗数」である。
しかし,22^2=484 は,条件 (a) に合わないので 22 は「排他的 2 乗数」ではなく,123^4=228886641 は,条件 (b) に合わないので,123 は「排他的 4 乗数」ではない。
2 つの正の整数 m と n があるとき,m より小さい「排他的 n 乗数」のうち,もっとも大きな値を求めよ。そのようなものがない場合には "-" を返すものとする。
以下の R プログラムでは,時間が掛かりすぎる。
func = function(m, n) {
options(scipen=100)
for (i in (m-1):1) {
a = unlist(strsplit(as.character(i), ""))
if (!any(table(a) > 1)) {
b = unlist(strsplit(as.character(i^n), ""))
if (!any(b %in% a)) return(i)
}
}
return("-")
}