Python 代码练习:判断相亲数

2500 年前,数学大师毕达哥拉斯就发现,220 和 284 两数之间存在着奇妙的联系:

220 的因数之和(除了自身之外的因数)为:110 + 55 + 44 + 22 + 20 + 11 + 10 + 5 + 4 + 2 + 1 = 284,284 的因数之和为:142 + 71 + 4 + 2 + 1 = 220。

毕达哥拉斯把这样的数对称为相亲数。输入两个正整数(大于 1 并且在 int 的表示范围之内),分别计算它们所有因数之和(除了自身之外的因数),并判断它们是否是一对相亲数。

【输入形式】

从标准输入输入两个正整数,以一个空格分隔这两个正整数。

【输出形式】

以输入的先后顺序分行输出:输入的正整数,后跟英文逗号‘,’ ,再从除自身之外的最大的因数开始输出其因数相加的公式(最小的因数 1 之后没有加号),最后输出英文等号‘=’ 和因数之和。注意:所有输出元素间无空格。 若它们是一对相亲数,则在新的一行上输出 1;若不是则在新的一行上输出 0。

【样例输入 1】

220 284

【样例输出 1】

220,110+55+44+22+20+11+10+5+4+2+1=284 284,142+71+4+2+1=220 1

解答思路:

这题主要考察对于因数的求解和判断。对于每一个数 n,我们可以枚举 1 到 n-1 之间的每一个数 i,判断 i 是否是 n 的因数,如果是,累加到因数之和 sum 中。同时,我们还需要判断两个数是否是相亲数,这可以在得到两个数的因数之和分别为 num1 和 num2 之后判断 num1 是否等于第二个数,num2 是否等于第一个数。

Python 代码

num1, num2 = map(int, input().split())

# 计算 num1 的因数之和
num1_sum = 0
for i in range(1, num1):
    if num1 % i == 0:
        num1_sum += i
# 输出 num1 的因数之和
print(f'{num1},{''.join([str(i) + '+' for i in range(num1 - 1, 0, -1) if num1 % i == 0])}{1}={num1_sum}')

# 计算 num2 的因数之和
num2_sum = 0
for i in range(1, num2):
    if num2 % i == 0:
        num2_sum += i
# 输出 num2 的因数之和
print(f'{num2},{''.join([str(i) + '+' for i in range(num2 - 1, 0, -1) if num2 % i == 0])}{1}={num2_sum}')

# 判断是否为相亲数
if num1_sum == num2 and num2_sum == num1:
    print(1)
else:
    print(0)
Python 编程练习:判断相亲数

原文地址: https://www.cveoy.top/t/topic/n70a 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录