+6 投票
分类:问答挑战 | 用户: 8 5 2 (1.4k 分)

请用尽可能少的循环完成以下题目:

【问题描述】

 求整数n以内(含n)的全部亲密数。

说明:如果正整数A的全部因子(包括1,不包括A本身)之和

等于B;且正整数B的全部因子(包括1,不包括B本身)

之和等于A,则将正整数AB称为亲密数。

1不和其他数形成亲密数。


【输入形式】

输入整数n
【输出形式】

 每一行输出一对亲密数,中间用一个空格隔开。

 每一对亲密数只输出一次,小的在前。

 各对亲密数按序排序,按亲密数中小的那个数从小到大排序。

【样例输入】

3000

【样例输出】

220 284

1184 1210

2620 2924

2 个回答

0 投票
用户: 9 8 7 (4.6k 分)
采纳于 用户:
 
已采纳
#优化楼上代码

a = int(input());

b = [0 for i in range(a+1)]

for i in range(1,a+1):

    sum = 0

    for c in range(1,int(i/2+2)):

        if (i%c == 0):

            sum += c         

    if sum <= a and b[sum] == i:

        print("{} {}".format(min(sum,i),max(sum,i)))

    b[i] = sum
0 投票
用户: 10 10 7 (8.0k 分)
修改于 用户:
a = int(input())

b = [0 for i in range(a+1)]   

# 初始化一个为零的列表,进行迭代b[i]=sum

result = {}          # 初始化结果

for i in range(1,a+1):

    sum = 0

    for c in range(1,i):

        if (i%c == 0):

            sum += c    #  表示i的因子和是sum

    if sum <= a and b[sum] == i:

                               # 构造sum的因子和是i

        print("{} {}".format(min(sum,i),max(sum,i)))

    b[i] = sum

 # 构造sum的因子会是i,对零列表挨个填充每一个元素都是对应i的因子和,所以第sum个元素是sum的因子和,即b[sum]==i.

亲密数是个比较经典的问题,因为了解过,可能有点复现的意思
欢迎来到 在线问答系统 ,有什么不懂的可以尽管在这里提问,你将会收到社区其他成员的回答。
...