
python怎么判断完全数
用户关注问题
什么是完全数?
在计算机编程中,完全数指的是什么?
完全数的定义
完全数是指一个正整数,其所有真因子(不包括自身的因子)相加等于该数本身。例如,6的因子是1、2和3,1+2+3=6,因此6是完全数。
如何用Python代码判断一个数是否为完全数?
有没有简单的方法在Python中判断一个整数是否为完全数?
用Python判断完全数的代码示例
可以通过遍历该数的所有小于它的因子,累加这些因子,再比较累加和是否等于该数来判断。示例代码如下:
def is_perfect_number(n):
divisors_sum = 0
for i in range(1, n):
if n % i == 0:
divisors_sum += i
return divisors_sum == n
# 测试
print(is_perfect_number(6)) # 输出True
print(is_perfect_number(10)) # 输出False
如何优化判断完全数的算法?
直接遍历所有小于该数的数判断因子效率较低,有没有更高效的方法?
提高判断效率的方法
只需遍历到该数的平方根即可,因为因子成对出现。例如,当 i 是因子时,n//i 也是因子。代码改进如下:
import math
def is_perfect_number(n):
if n <= 1:
return False
divisors_sum = 1
sqrt_n = int(math.sqrt(n))
for i in range(2, sqrt_n + 1):
if n % i == 0:
divisors_sum += i
if i != n // i:
divisors_sum += n // i
return divisors_sum == n
# 测试
print(is_perfect_number(28)) # True
print(is_perfect_number(12)) # False