RosettaCodeData/Task/Self-numbers/EasyLang/self-numbers.easy
2026-02-01 16:33:20 -08:00

63 lines
996 B
Text

fastfunc digsum h .
while h > 0
ds += h mod 10
h = h div 10
.
return ds
.
fastfunc isself j i .
sum = j + digsum j
while j < i
if sum = i : return 0
sum += 2
j += 1
if j mod 10 = 0
if j mod 100 <> 0
sum -= 9
else
sum = j + digsum j
.
if sum + 18 <= i or sum > i or (sum + i) mod 2 <> 0
j += 9
sum += 18
.
.
.
return 1
.
global pow10 offs .
fastfunc next ind .
repeat
ind += 1
if ind = pow10
pow10 *= 10
offs += 9
.
until isself (ind - offs) ind = 1
.
return ind
.
proc first50 .
pow10 = 10
offs = 9
repeat
ind = next ind
cnt += 1
write ind & " "
until cnt = 50
.
print ""
.
first50
#
fastfunc getselfnr lim .
pow10 = 10
offs = 9
repeat
ind = next ind
cnt += 1
until cnt = lim
.
return ind
.
print getselfnr 100000000