Skip to Main Content
Blog

Print all SuperD Numbers in Python

Print all SuperD Numbers in Python

Enter lower bound: 1
Enter upper bound: 999
Enter d: 3
261, 462, 471, 481, 558, 753,
def main():
	"""
	Prints all the Super-D numbers within a given range.
	"""

	BASE = 10

	a = int(input("Enter lower bound: "))
	b = int(input("Enter upper bound: "))
	d = int(input("Enter d: "))

	for i in range(a, b + 1):
		if is_super_d(i, d, BASE):
			print(i, end=", ")
	print()


def is_super_d(number: int, d: int, base: int):
	"""
	Checks if a number is a Super-D number or not.
	"""

	if number <= 0:
		return False

	super_number = d * (number**d)
	d_exponent = base**d
	d_digits = 0
	for _ in range(1, d + 1):
		d_digits = d_digits * base + d

	while super_number != 0:
		end_digits = super_number % d_exponent
		if end_digits == d_digits:
			return True
		super_number //= base
	return False


if __name__ == "__main__":
	main()