22 lines
566 B
Text
22 lines
566 B
Text
/* Function that returns a list of digits given a nonnegative integer */
|
|
decompose(num) := block([digits, remainder],
|
|
digits: [],
|
|
while num > 0 do
|
|
(remainder: mod(num, 10),
|
|
digits: cons(remainder, digits),
|
|
num: floor(num/10)),
|
|
digits
|
|
)$
|
|
|
|
disariump(n):=block(
|
|
decompose(n),
|
|
makelist(%%[i]^i,i,length(%%)),
|
|
apply("+",%%),
|
|
if n=%% then true)$
|
|
|
|
disarium_count(len):=block([i:0,count:0,result:[]],
|
|
while count<len do (if disariump(i) then (result:endcons(i,result),count:count+1),i:i+1),
|
|
result)$
|
|
|
|
/*Test cases */
|
|
disarium_count(18);
|