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

40 lines
702 B
Nim

import strformat
func primeFactors(n: int): seq[int] =
result = newSeq[int]()
var n = n
var i = 2
while n mod i == 0:
result.add(i)
n = n div i
i = 3
while i * i <= n:
while n mod i == 0:
result.add(i)
n = n div i
inc i, 2
if n != 1:
result.add(n)
func sumDigits(n: int): int =
var n = n
var sum = 0
while n > 0:
inc sum, n mod 10
n = n div 10
sum
var cnt = 0
for n in 1..10_000:
var factors = primeFactors(n)
if factors.len > 1:
var sum = sumDigits(n)
for f in factors:
dec sum, sumDigits(f)
if sum == 0:
stdout.write(&"{n:4} ")
inc cnt
if cnt == 10:
cnt = 0
stdout.write("\n")
echo()