While you can’t directly code a perfect square as a data type in Python, you can create functions or classes to represent and manipulate perfect squares. Here is an example code:
def perfect_squares_upto_n(n):
# Generate a list of perfect square numbers up to the square root of n
squares = [i * i for i in range(1, int(n**0.5) + 1)]
level = 0
queue = {(n, ())}
# Iterate over each remainder in the current queue
while queue:
level += 1
updated_queue = set()
for remainder, path in queue:
for square in squares:
# If the remainder equals the current perfect square number,
# return the current level as the minimum number of perfect squares
if remainder == square:
path += (square,)
return level, path
# If the remainder is less than the current perfect square number,
# break the loop because further perfect square numbers will be larger
elif remainder < square:
break
# If the remainder is greater than the current perfect square number,
# add the difference to the updatedQueue for further processing
else:
updated_queue.add((remainder - square, path + (square,)))
queue = updated_queue
return level, []
# Driver code
def main():
n = [13, 344, 561, 78, 900]
for number in n:
squares_count, squares_used = perfect_squares_upto_n(number)
print("n = ", number)
print("Minimum squares = ", squares_count)
print("Perfect squares used = ", squares_used)
print("-" * 100)
if __name__ == "__main__":
main()