题目描述
有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。例如:
9的约数和有:1+3=4
4的约数和有:1+2=3
所以9和4不是友好的。
220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284
284的约数和有:1 2 4 71 142=220
所以220和284是友好的。编写程序,判断两个数是否是友好数
输入说明:
一行,两个整数,由空格分隔
输出说明:
如果是友好数,输出"yes",否则输出"no",注意不包含引号。
输入样例:
220 284
输出样例:
yes
实现代码:
import math
N, M = map(int, input().split())
Num1 = []
Num2 = []
# 遍历找出所有约数并加入列表中
for n in range(1, int(math.sqrt(N))):
if N % n == 0:
Shang_n = N//n
if n == 1:
Num1.append(n)
else:
Num1.extend((n, Shang_n))
for m in range(1, int(math.sqrt(M))):
if M % m == 0:
Shang_m = M//m
if m ==1 :
Num2.append(m)
else:
Num2.extend((m, Shang_m))
Num1.sort(), Num2.sort()
Sum1 = 0
Sum2 = 0
for i in Num1:
Sum1 += i
for s in Num2:
Sum2 += s
if Sum1 == M and Sum2 == N:
print('yes')
else:
print('no')
新手,觉得不好的地方麻烦给点建议=====