RosettaCodeData/Task/Rhonda-numbers/Python/rhonda-numbers.py

48 lines
1.2 KiB
Python

# rhonda.py by Xing216
def prime_factors_sum(n):
i = 2
factors_sum = 0
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors_sum+=i
if n > 1:
factors_sum+=n
return factors_sum
def digits_product(n: int, base: int):
# translated from the nim solution
i = 1
while n != 0:
i *= n % base
n //= base
return i
def is_rhonda_num(n:int, base: int):
product = digits_product(n, base)
return product == base * prime_factors_sum(n)
def convert_base(num,b):
numerals="0123456789abcdefghijklmnopqrstuvwxyz"
return ((num == 0) and numerals[0]) or (convert_base(num // b, b).lstrip(numerals[0]) + numerals[num % b])
def is_prime(n):
if n == 1:
return False
i = 2
while i*i <= n:
if n % i == 0:
return False
i += 1
return True
for base in range(4,37):
rhonda_nums = []
if is_prime(base):
continue
i = 1
while len(rhonda_nums) < 10:
if is_rhonda_num(i,base) :
rhonda_nums.append(i)
i+=1
else:
i+=1
print(f"base {base}: {', '.join([convert_base(n, base) for n in rhonda_nums])}")