[题目描述]
 古希腊数学家毕达哥拉斯在自然数研究中发现,220 的所有真约数(即不是自身的约数)之和为:
 1+2+4+5+10+11+20+22+44+55+110=284 。
 而 284 的所有真约为 1 、 2 、 4 、 71 、 142 ,加起来恰好为 220 。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
 你的任务就编写一个程序,判断给定的两个数是否是亲和数。
输入格式:
 输入数据第一行包含一个数 M ,接下有 M 行,每行一个实例,包含两个整数 A , B 。
输出格式:
 对于每个测试实例,如果 A 和 B 是亲和数的话输出YES,否则输出NO。
样例输入
 2
 220 284
 100 200
样例输出
 YES
NO
数据范围:
 对于 100% 的数据,保证 1≤A,B≤600000 。
来源/分类(难度系数:一星)
完整代码展示:
 a=int(input())
 b=[]
 for i in range(a):
      c=list(map(int,input().split()))
      b.append(c)
 d=0
 while d<len(b):
        e=b[d][0]
        f=b[d][1]
        g=[]
        h=[]
        for j in range(1,e):
              if e%j==0:
                    g.append(j)
        for k in range(1,f):
              if f%k==0:
                    h.append(k)
        if sum(g)==f and sum(h)==e:
              print("YES")
       else:
              print("NO")
        d+=1
代码解释:
 “a=int(input())
  b=[]                    ”,让用户输入需要测试的数据组数a。建立一个空列表b。
 “for i in range(a):
        c=list(map(int,input().split()))
        b.append(c)                                 ”,建立一个列表c,储存每组需要测试的数据,并将其添加进列表b中。重复以上操作循环a次。
 “d=0
  while d<len(b):
         e=b[d][0]
         f=b[d][1]
         g=[]
         h=[]
         for j in range(1,e):
               if e%j==0:
                     g.append(j)
        for k in range(1,f):
               if f%k==0:
                     h.append(k)
        if sum(g)==f and sum(h)==e:
              print("YES")
       else:
              print("NO")
       d+=1                                            ”,令d==0,当d<len(b)时,令e==b[d][0],f==b[d][1],建立两个空列表g,h。遍历从1到e-1的所有数,查找能被e整除的数字,并将其添加进列表g中,直至循环结束;列表h同理。两次循环均结束后,判断列表g中所有元素的总和是否为f,同时判断列表h中所有元素的总和是否为e;如果均是,则输出“YES”,否则输出“NO”。每循环一次,就让d+=1,直至d==len(b),跳出整个while循环。
运行效果展示:

 
 
(声明:以上内容均为原创)