使用python检查给定的两个数字是否是亲和数

云课堂学Python 2024-04-03 18:16:41

亲和数(amicable numbers),又称相亲数、友爱数、友好数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等。毕达哥拉斯曾说:“朋友是你灵魂的倩影,要像 220 与 284 一样亲密。”

「算法:」

将待检测的两个整数存储在不同的变量中。使用 for 循环迭代(从 2 到 N-1),如果这个整数能迭代变量整除,累加除数求和。对另一个整数重复上述步骤。检查一个整数除数的总和是否等于另一个整数。def checkAmicableNum(num1, num2): totalSum1 = 1 for i in range(2, num1): if num1 % i == 0: totalSum1 += i totalSum2 = 1 for i in range(2, num2): if num2 % i == 0: totalSum2 += i if totalSum1 == num2 and totalSum2 == num1: return True return Falsenum1 = 220num2 = 284if checkAmicableNum(num1, num2): print(num1, num2, "是一对亲和数。")else: print(num1, num2, "不是一对亲和数。")

对以上代码进行优化,迭代范围可以从 2 到 n//2,因为 n 的因子不可能大于 n 的一半。减少了一半的迭代次数,效率提高。

进一步优化代码,迭代范围从 2 到 n 的平方根。

def checkAmicableNum(num1, num2): totalSum1 = 1 k = 2 while k * k <= num1: if num1 % k == 0: totalSum1 = totalSum1 + k + num1/k k += 1 totalSum2 = 1 k = 2 while k * k <= num2: if num2 % k == 0: totalSum2 = totalSum2 + k + num2/k k += 1 if totalSum1 == num2 and totalSum2 == num1: return True return Falsenum1 = 220num2 = 284if checkAmicableNum(num1, num2): print(num1, num2, "是一对亲和数。")else: print(num1, num2, "不是一对亲和数。")

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈。

0 阅读:0

云课堂学Python

简介:感谢大家的关注