Python程序:检查给定数字是否为快乐数

Python程序:检查给定数字是否为快乐数

快乐数是指一个正整数,每次将该数替换为它每个位置上的数字的平方和,重复进行这个过程直到这个数字变为1,或者无限循环但始终变不到1。如果可以变为1,那么这个数字就是一个快乐数。例如,19是一个快乐数,因为:

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

下面是一个Python程序,用来检查给定数字是否为快乐数:

def isHappy(n: int) -> bool:
    loop_dict = {}
    while n != 1 and n not in loop_dict:
        loop_dict[n] = True
        n = sum([int(digit) ** 2 for digit in str(n)])
    return n == 1

通过给定一个整数n,该程序运算检查是否为快乐数。程序通过一个字典loop_dict记录已经检查过的数字,以避免重复检查。程序将数字变为它每个位置上的数字的平方和,并检查是否已经在之前的检查过程中出现过。

以下是一个简单的测试代码,用来检查数字是否为快乐数:

print(isHappy(19))  # True
print(isHappy(4))   # False

这个程序的性能并不是很好。它最坏的情况下需要的时间复杂度是O(log n)。更好的解决方案可以通过使用Floyd循环检测算法,该算法通过使用两个指针来检测循环。

以下是一个使用Floyd算法实现的快乐数检查Python程序:

def isHappy(n: int) -> bool:
    slow, fast = n, n
    while True:
        slow = sum([int(digit) ** 2 for digit in str(slow)])
        fast = sum([int(digit) ** 2 for digit in str(fast)])
        fast = sum([int(digit) ** 2 for digit in str(fast)])
        if slow == fast:
            break
    return slow == 1

该程序使用两个指针来检测循环。其中,fast指针每次都会比slow指针多进行一次“变幻”,如果存在循环,那么fast一定可以“追到”slow。再通过快速检查slow是否等于1,即可得出结论。

以下是一个简单的测试代码,用来测试Floyd算法实现的快乐数检查程序。

print(isHappy(19))  # True
print(isHappy(4))   # False

结论

Python程序可以用来检查给定的数字是否为快乐数。使用字典来记录检查过程可以避免重复检查,而使用Floyd算法实现的程序可以更快速地检查给定的数字。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程