49 lines
830 B
Python
49 lines
830 B
Python
from sys import stdout
|
|
|
|
|
|
def factors(n):
|
|
rt = []
|
|
f = 2
|
|
if n == 1:
|
|
rt.append(1);
|
|
else:
|
|
while 1:
|
|
if 0 == ( n % f ):
|
|
rt.append(f);
|
|
n //= f
|
|
if n == 1:
|
|
return rt
|
|
else:
|
|
f += 1
|
|
return rt
|
|
|
|
|
|
def sum_digits(n):
|
|
sum = 0
|
|
while n > 0:
|
|
m = n % 10
|
|
sum += m
|
|
n -= m
|
|
n //= 10
|
|
|
|
return sum
|
|
|
|
|
|
def add_all_digits(lst):
|
|
sum = 0
|
|
for i in range (len(lst)):
|
|
sum += sum_digits(lst[i])
|
|
|
|
return sum
|
|
|
|
|
|
def list_smith_numbers(cnt):
|
|
for i in range(4, cnt):
|
|
fac = factors(i)
|
|
if len(fac) > 1:
|
|
if sum_digits(i) == add_all_digits(fac):
|
|
stdout.write("{0} ".format(i) )
|
|
|
|
# entry point
|
|
list_smith_numbers(10_000)
|