RosettaCodeData/Task/Smith-numbers/Ring/smith-numbers.ring
2023-07-01 13:44:08 -04:00

55 lines
1.1 KiB
Text

# Project : Smith numbers
see "All the Smith Numbers < 1000 are:" + nl
for prime = 1 to 1000
decmp = []
sum1 = sumDigits(prime)
decomp(prime)
sum2 = 0
if len(decmp)>1
for n=1 to len(decmp)
cstr = string(decmp[n])
for m= 1 to len(cstr)
sum2 = sum2 + number(cstr[m])
next
next
ok
if sum1 = sum2
see "" + prime + " "
ok
next
func decomp nr
for i = 1 to nr
if isPrime(i) and nr % i = 0
add(decmp, i)
pr = i
while true
pr = pr * i
if nr%pr = 0
add(decmp, i)
else
exit
ok
end
ok
next
func isPrime num
if (num <= 1) return 0 ok
if (num % 2 = 0 and num != 2) return 0 ok
for i = 3 to floor(num / 2) -1 step 2
if (num % i = 0) return 0 ok
next
return 1
func sumDigits n
sum = 0
while n > 0.5
m = floor(n / 10)
digit = n - m * 10
sum = sum + digit
n = m
end
return sum