48 lines
1.2 KiB
Python
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])}")
|