isSmith := proc(n::posint) local factors, sumofDigits, sumofFactorDigits, x; if isprime(n) then return false; else sumofDigits := add(x, x = convert(n, base, 10)); sumofFactorDigits := add(map(x -> op(convert(x, base, 10)), [op(NumberTheory:-PrimeFactors(n))])); return evalb(sumofDigits = sumofFactorDigits); end if; end proc: findSmith := proc(n::posint) return select(isSmith, [seq(1 .. n - 1)]); end proc: findSmith(10000);